user2824073
user2824073

Reputation: 2485

Implementing a CXF Web service using Camel

I'm trying to expose a Code First Web service using Camel CXF Component. By assembling some of the available examples, I've come to the following route definition:

<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:camel="http://camel.apache.org/schema/spring"
    xmlns:cxf="http://camel.apache.org/schema/cxf" xmlns:context="http://www.springframework.org/schema/context"
    xsi:schemaLocation="
       http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
       http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
       http://camel.apache.org/schema/spring http://camel.apache.org/schema/spring/camel-spring.xsd
       http://camel.apache.org/schema/cxf http://camel.apache.org/schema/cxf/camel-cxf.xsd">

    <bean id="productServiceImpl" class="com.demo.ws.CustomerServiceImpl" />

    <camelContext xmlns="http://camel.apache.org/schema/spring">

        <route>
            <from uri="cxf:bean:productServiceEndpoint" />

            <bean ref="productServiceImpl" />
            <!-- log input received -->
            <to uri="log:output" />
        </route>


    </camelContext>
    <cxf:cxfEndpoint id="productServiceEndpoint"
        address="http://localhost:9001/productService" serviceClass="com.demo.ws.CustomerService" />


</beans>

The SEI and implementation classes I'm using are trivial:

@WebService(serviceName="customerService")
public interface CustomerService 
{
    public String getCustomerById(String customerId);

}

public class CustomerServiceImpl implements CustomerService
{


    @Override
    public String getCustomerById(String customerId)
    {
         System.out.println("Called with "+customerId);
        return "Hello " +customerId;
    }
}

When running the project, the Webservice the implementation class is called correctly, returning the String "Hello [name]", however the returned body from SOAPUI is empty:

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
   <soap:Body/>
</soap:Envelope>

Can you help me to produce the return value in the Response ? Thank you

Upvotes: 1

Views: 129

Answers (1)

Thomas
Thomas

Reputation: 1140

You should return a SOAP message :

        SOAPMessage soapMessage = MessageFactory.newInstance().createMessage();
        SOAPBody body = soapMessage.getSOAPPart().getEnvelope().getBody();

        QName payloadName = new QName("http://apache.org/hello_world_soap_http/types", "greetMeResponse", "ns1");

        SOAPBodyElement payload = body.addBodyElement(payloadName);

        SOAPElement message = payload.addChildElement("responseType");

        message.addTextNode("Your custom message");
        return soapMessage;

You can also take a look to the camel doc examples : http://camel.apache.org/cxf-example.html

Upvotes: 1

Related Questions