[ http://jira.codehaus.org/browse/XFIRE-307?page=all ]
Dan Diephouse closed XFIRE-307:
-------------------------------
Resolution: Fixed
Fix Version: 1.1-beta-1
Thanks Flier! This is fixed (and tested) now in SVN.
> RPCBinding cannot process response message in client mode
> ---------------------------------------------------------
>
> Key: XFIRE-307
> URL: http://jira.codehaus.org/browse/XFIRE-307
> Project: XFire
> Type: Bug
> Components: Core
> Versions: 1.0
> Environment: jdk1.4.2
> Reporter: Flier Lu
> Assignee: Dan Diephouse
> Fix For: 1.1-beta-1
>
>
> when I create dynamic proxy in client, call proxy method can invoke web
> service method succeeded, but the server response message cannot be processed
> in client side. because when RPCBinding process the server response message,
> it use the local name of response element as operation name, but the server
> response element shold have a "Response" postfix, the operation finding will
> failed.
> public class RPCBinding extends WrappedBinding
> {
> public void readMessage(InMessage inMessage, MessageContext context)
> throws XFireFault
> {
> DepthXMLStreamReader dr = new
> DepthXMLStreamReader(context.getInMessage().getXMLStreamReader());
> String opName = dr.getLocalName();
> OperationInfo operation = endpoint.getServiceInfo().getOperation(
> opName );
> //...
> }
> }
> so I add some check for client mode, and use the MessageExchange in context
> to fetch operation, like this
> OperationInfo operation;
>
> if (isClientModeOn(context) && context.getExchange() != null &&
> context.getExchange().getOperation().hasOutput() &&
>
> opName.equals(context.getExchange().getOperation().getOutputMessage().getName().getLocalPart()))
> {
> operation = context.getExchange().getOperation();
> }
> else
> {
> operation = endpoint.getServiceInfo().getOperation( opName );
> }
> this code woke fine in my envrionment, and not broken the unit testcases,
> but I don't known whether are there other method can process this status ?
> I define the web service interface with annotation
> /**
> * @@WebService(name = "DeviceWS", serviceName = "DeviceWS", targetNamespace
> = "http://www.nsfocus.com/flowind")
> * @@SOAPBinding(style = SOAPBindingAnnotation.STYLE_RPC)
> */
> public interface DeviceWS
> {
> /**
> * @@WebMethod(operationName = "getRouters", action="urn:GetRouters")
> * @@.return WebResult("routers")
> */
> String[] getRouters();
> }
> and call service
> Service svc = new AnnotationServiceFactory(new CommonsWebAttributes(),
>
> XFireFactory.newInstance().getXFire().getTransportManager()).create(DeviceWS.class);
>
> DeviceWS ws = (DeviceWS) new XFireProxyFactory().create(svc, URL_WS +
> "DeviceWS");
> ws.getRouters() //...
--
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
http://jira.codehaus.org/secure/Administrators.jspa
-
For more information on JIRA, see:
http://www.atlassian.com/software/jira