Hi,
Thanks for that - I copped on to this and it seemed have done the trick.
Regards
On 2/28/07, Phil Bowker <[EMAIL PROTECTED]> wrote:
Hi Adrian,
I added the following class to force an AddressingOperationInfo object to
be added. Note that the "Response"
string added is for our C# client.
/**
* This class registers an AddressingOperationInfo object with an
* OperationInfo, as required to support WS-Addressing.
*/
public class FcMoonServiceFactory extends JAXWSServiceFactory
{
/**
* Forces a new AddressingOperationInfo object to be registered with the
* OperationInfo.
*/
@Override
protected OperationInfo addOperation(Service endpoint, Method method,
String style)
{
OperationInfo op = super.addOperation(endpoint, method, style);
/*
* The AddressingOperationInfo ctor registers itself so nothing needs
* to be done with the new object created by this method.
*
* The "Response" string is appeneded to the action to provide a
* return string that matches that expected by the C# client.
*/
String action = getAction(op);
new AddressingOperationInfo(action, action + "Response", null, op);
return op;
}
}
Please let me know if this works for you.
Phil
On 27/02/07, Adrian Corcoran <[EMAIL PROTECTED]> wrote:
>
> Hi,
>
> I have a problem with invoking a service using ws-addressing. I have the
> ws addressing action set, the AddressingInHandler does not seem to be able
> to find the operation for that action. In fact when I debug through the
> AddressingInHandler I see that service.getOperations() returns all the
> correct operations for the service, however these OperationInfo have no
> AddressingOperationInfo... I can't see any reason why, infact I can't see
> where AddressingOperationInfo's are created!
>
> I am using JAXB2 binding at the moment. Below is my config, am stumped!
>
> Thanks for looking..
>
>
> == soap request being sent ==
>
> <env:Envelope xmlns:env=" http://schemas.xmlsoap.org/soap/envelope/"
> xmlns:wsa="http://www.w3.org/2005/08/addressing ">
> <env:Header>
> <wsa:Action> http://www.noname.com/de/ws/customerservice/EnrolCI
> </wsa:Action>
> <wsa:ReplyTo>
> <wsa:Address>queue://CustomerServiceResponse</wsa:Address>
> </wsa:ReplyTo>
> </env:Header>
> <env:Body>
> <EnrolCIRequest xmlns="http://www.noname.com/de/ws"
> RequestIdentifier="requestidentifier">
>
> <serviceProviderInstanceIdentifier>0</serviceProviderInstanceIdentifier>
> <username>username</username>
> <address>address</address>
> </EnrolCIRequest>
> </env:Body>
> </env:Envelope>
>
> == services.xml ===
> <beans xmlns=" http://xfire.codehaus.org/config/1.0">
>
>
> <xfire>
> <transports>
> <bean id="jmsTransport"
> class="org.codehaus.xfire.transport.jms.JMSTransport "
> xmlns=" http://xbean.org/schemas/spring/1.0">
> <constructor-arg ref="xfire"/>
> <constructor-arg ref="connectionFactory"/>
> </bean>
> </transports>
> </xfire>
>
> <service xmlns:c="urn:CustomerService">
> <name>CustomerService</name>
>
<serviceClass>de.ws.xfire.service.CustomerService_v1Impl</serviceClass>
>
> <serviceFactory>org.codehaus.xfire.jaxb2.JaxbServiceFactory
> </serviceFactory>
> <inHandlers>
> <handler handlerClass="
> org.codehaus.xfire.addressing.AddressingInHandler "/>
> </inHandlers>
> <outHandlers>
> <handler handlerClass="
> org.codehaus.xfire.addressing.AddressingOutHandler"/>
> </outHandlers>
> <bindings>
> <soap11Binding name="c:CustomerServiceJMSBinding"
> transport="urn:xfire:transport:jms">
> <endpoints>
> <endpoint name="c:CustomerServiceJMSEndpoint"
> url="jms://CustomerService" />
> </endpoints>
> </soap11Binding>
> </bindings>
>
> </service>
>
> <bean id="connectionFactory"
> class="org.apache.activemq.ActiveMQConnectionFactory "
> singleton="true" xmlns="http://xbean.org/schemas/spring/1.0/ ">
> <constructor-arg value="tcp://localhost:61616"
> type="java.lang.String" />
> </bean>
>
> </beans>
>
>
> == CustomerService_v1Impl.java ===
>
> package com.noname.de.ws.xfire.service;
>
> import javax.jws.WebService;
>
> import org.apache.commons.logging.Log;
> import org.apache.commons.logging.LogFactory;
>
> import com.noname.de.ws.EnrolCIResponse ;
>
> @WebService(serviceName = "CustomerService_v1", targetNamespace =
"http://www.noname.com/de/ws/customerservice
> ", endpointInterface = "
> com.noname.de.ws.xfire.service.CustomerService_v1")
> public class CustomerService_v1Impl
> implements CustomerService_v1
> {
>
> final static Log logger = LogFactory.getLog(CustomerService_v1Impl.class);
>
> public EnrolCIResponse enrolCI(com.noname.de.ws.EnrolCIRequest req)
> {
>
> logger.debug("got req.....");
>
> EnrolCIResponse res = new EnrolCIResponse();
>
> return res;
> }
> }
>
>
> == CustomerService_v1 ==
> package com.noname.de.ws.xfire.service;
>
> import javax.jws.WebMethod;
> import javax.jws.WebParam;
> import javax.jws.WebResult ;
> import javax.jws.WebService;
> import javax.jws.soap.SOAPBinding;
>
> import com.noname.de.ws.EnrolCIResponse;
>
> @WebService(name = "CustomerService_v1", targetNamespace =
"http://www.noname.com/de/ws/customerservice
> ")
> @SOAPBinding(style = SOAPBinding.Style.DOCUMENT, use =
> SOAPBinding.Use.LITERAL, parameterStyle =
> SOAPBinding.ParameterStyle.BARE)
> public interface CustomerService_v1 {
>
>
> @WebMethod(operationName = "EnrolCI", action =
"http://www.noname.com/de/ws/customerservice/EnrolCI
> ")
> @WebResult(name = "EnrolCIResponse", targetNamespace = "
http://www.noname.com/de/ws
> ")
> public EnrolCIResponse enrolCI(
> @WebParam(name = "EnrolCIRequest", targetNamespace =
"http://www.noname.com/de/ws
> ")
> com.noname.de.ws.EnrolCIRequest EnrolCIRequest);
>
> }
>
>
>