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:arg0>username</ns1:arg0> <ns1:arg1>password</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