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


Reply via email to