|
From: <ext...@ti...> - 2004-02-11 08:52:02
|
Hi Doug,
This restriction stems from the fact that Java is an object
oriented language. In the library, you register objects as
invocation handlers, under a particualt handler/service name,
and the dot notation is used to determine which method in
the handler to invoke.
If the <methodName> element would only contain the method
name part, ecluding the handler name, this information would
have to be inferred by some other mechanism. It would be
possible to rewrite the XmlRpcDispatcher to recognize method
names that do not include a handler part. The dispatcher could
then collect a handler registered under the same name as
the method name, and also invoke the method with that name
on the handler.
Example:
class MyHandler
{
public Object echo( Object object ) { return object; }
public int sum( int a, int b ) { return a + b; }
}
Normally, an object of this class would be registered under
a handler name in the XmlRpcServer. The dot notation would
then indicate which of the methods, echo or sum, to invoke.
An alternative would be to register the handler object
under more that one name, in this case under the names
"echo" and "sum". That is;
XmlRpcServer server =3D new XmlRpcServer();
XmlRpcInvocationHandler handler =3D new ReflectiveInvocationHandler( new =
MyHandler() );
server.registerInvocationHandler( "MyHandler", handler );
server.registerInvocationHandler( "echo", handler );
server.registerInvocationHandler( "sum", handler );
The dispatcher would recogninze a call to "MyHandler.echo" in
the normal way, and locate the handler registerd under "MyHandler",
and invoke its "echo" method. It would also recognize that the
method name does not use dot notation and locate the handler
registered under the name "echo", and also invoking the method
on it named "echo".
This is the easiest way I can think of. It requires minimum
modifications to XmlRpcDispatcher and everything will work.
However, it requires that each "plain method" you want to support
is registered in the server like in the example above.
To make this simple, a XmlRpcServer.registerMethods( =
XmlRpcInvocationHandler )
could be introduced that registers all methods in the handler under =
their
names. Note that in either case, no two handlers may contain
methods with the same name. No overloading is supported.
I can fix this tonight if you'd like. A nicer way would be to
be able to map a handler and a method to an alias, but that
would be harder to implement:
server.registerInvocationEntryPoint( "sumInts", myHandler, "sum" );
server.registerInvocationEntryPoint( "sumDoubles", myOtherHandler, =
"sum" );
In this case, "sumInts", and "sumDoubles" would be published. When
invoked, they would map to the "sum" method of myHandler and =
myOtherHandler,
respectively. Like I said, however, this would require more work.
Regards,
Greger.
-----Original Message-----
From: Doug Orleans [mailto:do...@pl...]
Sent: den 10 februari 2004 19:55
To: xmlrpc-developers
Subject: [Xmlrpc-developers] dots in XML-RPC method names
As far as I can tell, the XML-RPC spec does not require that a method
name (i.e. the contents of a <methodName> element) have a dot in it.
However, the marquee.xmlrpc.XmlRpcDispatcher class requires this,
returning an error "Invalid method name format" if the requested
method name doesn't contain a dot. (This is only for the server side;
marquee.xmlrpc.XmlRpcClient allows any arbitrary string). =20
Was it an intentional design decision to be more restrictive than the
XML-RPC spec? The "service.method" naming convention seems to be
widespread, but is this actually specified anywhere as a convention
that XML-RPC implementations ought to enforce? Or was this just an
oversight in the implementation of the Marquee library? If so, is it
something you're planning to fix, or has nobody noticed it before?
I'm asking because the project I'm working on already chose an RPC
protocol that involved plain method names (without dots), and I'd
have to modify the Marquee library to allow it, but I'm wondering if
instead I should convince the others on the project to change the
protocol to switch to the "service.method" naming convention.
If this convention is more than just a de facto standard, they might
be more willing to switch.
Thanks,
--Doug Orleans
do...@pl...
-------------------------------------------------------
The SF.Net email is sponsored by EclipseCon 2004
Premiere Conference on Open Tools Development and Integration
See the breadth of Eclipse activity. February 3-5 in Anaheim, CA.
http://www.eclipsecon.org/osdn
_______________________________________________
Xmlrpc-developers mailing list
Xml...@li...
https://lists.sourceforge.net/lists/listinfo/xmlrpc-developers
|
|
From: <ext...@ti...> - 2004-02-11 09:19:07
|
Hmmm... gave this some more thought. Perhaps the easiest
way would be to use aliases all the way? That is, the
server allows you to register aliases for "Handler.method"
names. Would this be a good solution for you? That is;
server.registerInvocationHandler( "MyHandler", myHandler );
server.registerInvocationAlias( "echo", "MyHandler.echo" );
server.registerInvocationAlias( "sum", "MyHandler.sum" );
(Normal dispatching works as before by invoking "MyHandler.echo",
and invoking just "echo" would map to "MyHandler.echo")
This would be equally simple to implement as the first proposal,
and it would be more flexible. When an XML-RPC message is
to be dispatched, where the method name does not contain
a dot, the dispatcher treats the method name as an alias
that is resolved by the server. This would allow the
alias to contain any character sequence, except dots.
The dispatcher could also be modified so that it always
checks to see if the method name is a registered alias,
in which case it is replaced by the alias mapping. This
would allow aliases that contains dots. Equally simple
to implement, but would require a Map lookup for every
invocation (extremely cheap, though, considering the XML and
TCP/IP overhead).
I think this would be best, what do you think?
Regards,
Greger.
-----Original Message-----
From: Olsson Greger (ext)=20
Sent: den 11 februari 2004 09:51
To: do...@pl...; xml...@li...
Subject: RE: [Xmlrpc-developers] dots in XML-RPC method names
Hi Doug,
This restriction stems from the fact that Java is an object
oriented language. In the library, you register objects as
invocation handlers, under a particualt handler/service name,
and the dot notation is used to determine which method in
the handler to invoke.
If the <methodName> element would only contain the method
name part, ecluding the handler name, this information would
have to be inferred by some other mechanism. It would be
possible to rewrite the XmlRpcDispatcher to recognize method
names that do not include a handler part. The dispatcher could
then collect a handler registered under the same name as
the method name, and also invoke the method with that name
on the handler.
Example:
class MyHandler
{
public Object echo( Object object ) { return object; }
public int sum( int a, int b ) { return a + b; }
}
Normally, an object of this class would be registered under
a handler name in the XmlRpcServer. The dot notation would
then indicate which of the methods, echo or sum, to invoke.
An alternative would be to register the handler object
under more that one name, in this case under the names
"echo" and "sum". That is;
XmlRpcServer server =3D new XmlRpcServer();
XmlRpcInvocationHandler handler =3D new ReflectiveInvocationHandler( new =
MyHandler() );
server.registerInvocationHandler( "MyHandler", handler );
server.registerInvocationHandler( "echo", handler );
server.registerInvocationHandler( "sum", handler );
The dispatcher would recogninze a call to "MyHandler.echo" in
the normal way, and locate the handler registerd under "MyHandler",
and invoke its "echo" method. It would also recognize that the
method name does not use dot notation and locate the handler
registered under the name "echo", and also invoking the method
on it named "echo".
This is the easiest way I can think of. It requires minimum
modifications to XmlRpcDispatcher and everything will work.
However, it requires that each "plain method" you want to support
is registered in the server like in the example above.
To make this simple, a XmlRpcServer.registerMethods( =
XmlRpcInvocationHandler )
could be introduced that registers all methods in the handler under =
their
names. Note that in either case, no two handlers may contain
methods with the same name. No overloading is supported.
I can fix this tonight if you'd like. A nicer way would be to
be able to map a handler and a method to an alias, but that
would be harder to implement:
server.registerInvocationEntryPoint( "sumInts", myHandler, "sum" );
server.registerInvocationEntryPoint( "sumDoubles", myOtherHandler, =
"sum" );
In this case, "sumInts", and "sumDoubles" would be published. When
invoked, they would map to the "sum" method of myHandler and =
myOtherHandler,
respectively. Like I said, however, this would require more work.
Regards,
Greger.
-----Original Message-----
From: Doug Orleans [mailto:do...@pl...]
Sent: den 10 februari 2004 19:55
To: xmlrpc-developers
Subject: [Xmlrpc-developers] dots in XML-RPC method names
As far as I can tell, the XML-RPC spec does not require that a method
name (i.e. the contents of a <methodName> element) have a dot in it.
However, the marquee.xmlrpc.XmlRpcDispatcher class requires this,
returning an error "Invalid method name format" if the requested
method name doesn't contain a dot. (This is only for the server side;
marquee.xmlrpc.XmlRpcClient allows any arbitrary string). =20
Was it an intentional design decision to be more restrictive than the
XML-RPC spec? The "service.method" naming convention seems to be
widespread, but is this actually specified anywhere as a convention
that XML-RPC implementations ought to enforce? Or was this just an
oversight in the implementation of the Marquee library? If so, is it
something you're planning to fix, or has nobody noticed it before?
I'm asking because the project I'm working on already chose an RPC
protocol that involved plain method names (without dots), and I'd
have to modify the Marquee library to allow it, but I'm wondering if
instead I should convince the others on the project to change the
protocol to switch to the "service.method" naming convention.
If this convention is more than just a de facto standard, they might
be more willing to switch.
Thanks,
--Doug Orleans
do...@pl...
-------------------------------------------------------
The SF.Net email is sponsored by EclipseCon 2004
Premiere Conference on Open Tools Development and Integration
See the breadth of Eclipse activity. February 3-5 in Anaheim, CA.
http://www.eclipsecon.org/osdn
_______________________________________________
Xmlrpc-developers mailing list
Xml...@li...
https://lists.sourceforge.net/lists/listinfo/xmlrpc-developers
-------------------------------------------------------
The SF.Net email is sponsored by EclipseCon 2004
Premiere Conference on Open Tools Development and Integration
See the breadth of Eclipse activity. February 3-5 in Anaheim, CA.
http://www.eclipsecon.org/osdn
_______________________________________________
Xmlrpc-developers mailing list
Xml...@li...
https://lists.sourceforge.net/lists/listinfo/xmlrpc-developers
|
|
From: Greger O. <gre...@ma...> - 2004-02-11 11:51:16
|
Hi again,
The suggested functionality now exists in the HEAD revision of
the CVS. You may now register aliases that map to a fully
qualified XML-RPC method name:
server.registerInvocationHandler( "MyHandler", myHandler );
server.registerInvocationHandlerAlias( "echo", "MyHandler.echo" );
server.registerInvocationHandlerAlias( "sum", "MyHandler.sum" );
The dispatcher will check all method names against the
alias map before performing the function call. In the example
above, all messages with method name "echo" will expand
to "MyHandler.echo" before being processed.
If requested, the XmlRpcServer could be expanded to reflectively
add aliases given an XmlRpcInvocationHandler like so:
server.registerInvocationHandlerAliases( myHandler );
This would then create aliases automatically for each method
name in the handler. Registering aliases manually, though,
allows you to substitute the name of a method for another:
server.registerInvocationHandlerAlias( "sumIntegers", "MyHandler.sum"
);
Hope this helps you, Doug. I leave the automatic aliasing for now.
Regards,
Greger Ohlson.
-----Ursprungligt meddelande-----
Fr=E5n: xml...@li...
[mailto:xml...@li...] F=F6r
ext...@ti...
Skickat: den 11 februari 2004 10:18
Till: do...@pl...; xml...@li...
=C4mne: RE: [Xmlrpc-developers] dots in XML-RPC method names
Hmmm... gave this some more thought. Perhaps the easiest
way would be to use aliases all the way? That is, the
server allows you to register aliases for "Handler.method"
names. Would this be a good solution for you? That is;
server.registerInvocationHandler( "MyHandler", myHandler );
server.registerInvocationAlias( "echo", "MyHandler.echo" );
server.registerInvocationAlias( "sum", "MyHandler.sum" );
(Normal dispatching works as before by invoking "MyHandler.echo",
and invoking just "echo" would map to "MyHandler.echo")
This would be equally simple to implement as the first proposal,
and it would be more flexible. When an XML-RPC message is
to be dispatched, where the method name does not contain
a dot, the dispatcher treats the method name as an alias
that is resolved by the server. This would allow the
alias to contain any character sequence, except dots.
The dispatcher could also be modified so that it always
checks to see if the method name is a registered alias,
in which case it is replaced by the alias mapping. This
would allow aliases that contains dots. Equally simple
to implement, but would require a Map lookup for every
invocation (extremely cheap, though, considering the XML and
TCP/IP overhead).
I think this would be best, what do you think?
Regards,
Greger.
-----Original Message-----
From: Olsson Greger (ext)=20
Sent: den 11 februari 2004 09:51
To: do...@pl...; xml...@li...
Subject: RE: [Xmlrpc-developers] dots in XML-RPC method names
Hi Doug,
This restriction stems from the fact that Java is an object
oriented language. In the library, you register objects as
invocation handlers, under a particualt handler/service name,
and the dot notation is used to determine which method in
the handler to invoke.
If the <methodName> element would only contain the method
name part, ecluding the handler name, this information would
have to be inferred by some other mechanism. It would be
possible to rewrite the XmlRpcDispatcher to recognize method
names that do not include a handler part. The dispatcher could
then collect a handler registered under the same name as
the method name, and also invoke the method with that name
on the handler.
Example:
class MyHandler
{
public Object echo( Object object ) { return object; }
public int sum( int a, int b ) { return a + b; }
}
Normally, an object of this class would be registered under
a handler name in the XmlRpcServer. The dot notation would
then indicate which of the methods, echo or sum, to invoke.
An alternative would be to register the handler object
under more that one name, in this case under the names
"echo" and "sum". That is;
XmlRpcServer server =3D new XmlRpcServer();
XmlRpcInvocationHandler handler =3D new ReflectiveInvocationHandler( new
MyHandler() );
server.registerInvocationHandler( "MyHandler", handler );
server.registerInvocationHandler( "echo", handler );
server.registerInvocationHandler( "sum", handler );
The dispatcher would recogninze a call to "MyHandler.echo" in
the normal way, and locate the handler registerd under "MyHandler",
and invoke its "echo" method. It would also recognize that the
method name does not use dot notation and locate the handler
registered under the name "echo", and also invoking the method
on it named "echo".
This is the easiest way I can think of. It requires minimum
modifications to XmlRpcDispatcher and everything will work.
However, it requires that each "plain method" you want to support
is registered in the server like in the example above.
To make this simple, a XmlRpcServer.registerMethods(
XmlRpcInvocationHandler )
could be introduced that registers all methods in the handler under
their
names. Note that in either case, no two handlers may contain
methods with the same name. No overloading is supported.
I can fix this tonight if you'd like. A nicer way would be to
be able to map a handler and a method to an alias, but that
would be harder to implement:
server.registerInvocationEntryPoint( "sumInts", myHandler, "sum" );
server.registerInvocationEntryPoint( "sumDoubles", myOtherHandler,
"sum" );
In this case, "sumInts", and "sumDoubles" would be published. When
invoked, they would map to the "sum" method of myHandler and
myOtherHandler,
respectively. Like I said, however, this would require more work.
Regards,
Greger.
-----Original Message-----
From: Doug Orleans [mailto:do...@pl...]
Sent: den 10 februari 2004 19:55
To: xmlrpc-developers
Subject: [Xmlrpc-developers] dots in XML-RPC method names
As far as I can tell, the XML-RPC spec does not require that a method
name (i.e. the contents of a <methodName> element) have a dot in it.
However, the marquee.xmlrpc.XmlRpcDispatcher class requires this,
returning an error "Invalid method name format" if the requested
method name doesn't contain a dot. (This is only for the server side;
marquee.xmlrpc.XmlRpcClient allows any arbitrary string). =20
Was it an intentional design decision to be more restrictive than the
XML-RPC spec? The "service.method" naming convention seems to be
widespread, but is this actually specified anywhere as a convention
that XML-RPC implementations ought to enforce? Or was this just an
oversight in the implementation of the Marquee library? If so, is it
something you're planning to fix, or has nobody noticed it before?
I'm asking because the project I'm working on already chose an RPC
protocol that involved plain method names (without dots), and I'd
have to modify the Marquee library to allow it, but I'm wondering if
instead I should convince the others on the project to change the
protocol to switch to the "service.method" naming convention.
If this convention is more than just a de facto standard, they might
be more willing to switch.
Thanks,
--Doug Orleans
do...@pl...
-------------------------------------------------------
The SF.Net email is sponsored by EclipseCon 2004
Premiere Conference on Open Tools Development and Integration
See the breadth of Eclipse activity. February 3-5 in Anaheim, CA.
http://www.eclipsecon.org/osdn
_______________________________________________
Xmlrpc-developers mailing list
Xml...@li...
https://lists.sourceforge.net/lists/listinfo/xmlrpc-developers
-------------------------------------------------------
The SF.Net email is sponsored by EclipseCon 2004
Premiere Conference on Open Tools Development and Integration
See the breadth of Eclipse activity. February 3-5 in Anaheim, CA.
http://www.eclipsecon.org/osdn
_______________________________________________
Xmlrpc-developers mailing list
Xml...@li...
https://lists.sourceforge.net/lists/listinfo/xmlrpc-developers
-------------------------------------------------------
The SF.Net email is sponsored by EclipseCon 2004
Premiere Conference on Open Tools Development and Integration
See the breadth of Eclipse activity. February 3-5 in Anaheim, CA.
http://www.eclipsecon.org/osdn
_______________________________________________
Xmlrpc-developers mailing list
Xml...@li...
https://lists.sourceforge.net/lists/listinfo/xmlrpc-developers
|
|
From: Doug O. <do...@pl...> - 2004-02-11 14:21:15
|
Greger Ohlson writes: > The suggested functionality now exists in the HEAD revision of > the CVS. Wow, quick service, thanks! I will try it out and see how it works. I hadn't yet thought about how to change the interface, I was just thinking about whether it needed to be changed... I'll let you know if I have any suggestions, but what you did looks pretty good at first glance. --do...@pl... |
|
From: Doug O. <do...@pl...> - 2004-02-14 15:31:59
|
Greger Ohlson writes: > You may now register aliases that map to a fully > qualified XML-RPC method name: > > server.registerInvocationHandler( "MyHandler", myHandler ); > server.registerInvocationHandlerAlias( "echo", "MyHandler.echo" ); > server.registerInvocationHandlerAlias( "sum", "MyHandler.sum" ); This works well, thanks! It would also be nice if a similar thing were available for XmlRpcProxy, which currently only sends methodNames with dots. > If requested, the XmlRpcServer could be expanded to reflectively > add aliases given an XmlRpcInvocationHandler like so: > > server.registerInvocationHandlerAliases( myHandler ); > > This would then create aliases automatically for each method > name in the handler. This would be convenient, yes. Again, something similar for XmlRpcProxy would be great too. --do...@pl... |