Hi
I am migrating a project from xfire-1.2.6 to CXF 2.1.1 and JDK1.5.0_15.
I cannot get the CXF client code to use my aegis mappings at all. I've
tried a number of different ways to generate my client as follows:
My interface for the Web Service is:
public interface IPartners {
public LoginResult Login(String username, String password);
}
The IPartners.aegis.xml file (in the same directory)
mappings xmlns=the_namespace
mapping
method name=Login
parameter index=0 mappedName=username/
parameter index=1 mappedName=password/
return-type name=LoginResult/
/method
/mapping
/mappings
=
Client code - version 1
--
String nameSpace = the_namespace;
String wsdlURL = address_I_am_using;
QName endpoint = new QName(nameSpace, Login);
ClientProxyFactoryBean factory1 = new ClientProxyFactoryBean();
factory1.setServiceClass(IPartners.class);
factory1.setAddress(wsdlURL);
factory1.getServiceFactory().setDataBinding(new AegisDatabinding());
factory1.setServiceName(endpoint);
IPartners partnersWS = (IPartners)factory1.create();
LoginResult lr = partnersWS.Login(username, password);
This does not respect the aegis file to generate the SOAP message - it
produces the following:
soap:Envelope xmlns:soap=http://schemas.xmlsoap.org/soap/envelope/;
soap:Body
ns1:Login xmlns:ns1=the_namespace
ns1:arg0username/ns1:arg0
ns1:arg1password/ns1:arg1
/ns1:Login
/soap:Body
/soap:Envelope
note the arg0 and arg1 rather than username and password
Strangely, if I change the aegis file so that it does not conform to the
XSD, it does complain that it is in invalid format.
=
Client code - version 2
--
String nameSpace = the_namespace;
String wsdlURL = address_I_am_using;
QName endpoint = new QName(nameSpace, Login);
JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean();
factory.getServiceFactory().setDataBinding(new AegisDatabinding());
factory.setServiceClass(IPartners.class);
factory.setAddress(wsdlURL);
factory.setEndpointName(endpoint);
IPartners partnersWS = (IPartners)factory.create();
LoginResult lr = partnersWS.Login(username, password);
This time, I get the following exception:
javax.xml.ws.WebServiceException: Could not find wsdl:binding operation info
for web method Login.
Now then, after playing around with many many different configurations, I
have found that if I start annotating the interface, I can remove the aegis
mapping file altogether and get the SOAP message I want! If I remove the
line where the AegisDatabinding() is set, it does not work though.
@WebService(targetNamespace=the_namespace)
public interface IPartners {
@WebMethod(action=the_namespace/Login)
public @WebResult(name=LoginResult) LoginResult
Login(@WebParam(name=username) String username, @WebParam(name=password)
String password);
}
So, I can make it work, by abandoning the aegis descriptors, annotating the
service interface and using the JaxWsProxyFactoryBean and setting the
AegisDatabinding(). This seems to be a little hacked!
I'm sure I must be missing something really obvious. I have played with
this for days to get to the ad hoc situation I'm in now. Any pointers from
anyone would be great!
Thanks in advance.
Matt
--
View this message in context:
http://www.nabble.com/Aegis-problems-migrating-from-xfire-tp18757019p18757019.html
Sent from the XFire - User mailing list archive at Nabble.com.
-
To unsubscribe from this list, please visit:
http://xircles.codehaus.org/manage_email