Hi,

I am running into a similar problem.  When my return is a boolean (i.e. I
think any primitive, but need to perform more testing), my response is an
empty response when using Camel, but not when using CXF and JAXWS.

I have included the WebMethod definition, the SOAP returns, the Spring
configuration and the processing code.  

Any help would be greatly appreciated.  I am new to Camel but I think is is
great so far.

Regards,
Marc

Here is my WebMethod definition.
    @SOAPBinding(parameterStyle = SOAPBinding.ParameterStyle.WRAPPED)
    @WebMethod(operationName = "create")
    public boolean create( @WebParam(targetNamespace =
"http://cobery.com/compositeinterface";, name = "composite") Composite comp);

Here is the return SOAP message from the Camel endpoint:
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/";>
   <soap:Body>
      <ns1:createResponse xmlns:ns1="http://core.rulestream.com/composite"/>
   </soap:Body>
</soap:Envelope>

Here is the return SOAP message from the CXF JAXWS endpoint:
<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope";>
   <soap:Body>
      <ns1:createResponse xmlns:ns1="http://core.rulestream.com/composite";>
         <return xmlns:ns1="http://core.rulestream.com";>true</return>
      </ns1:createResponse>
   </soap:Body>
</soap:Envelope>

Here is the process method code:
    public Boolean process(Exchange exchange) {
        Message msg = exchange.getIn();
        Composite comp = (Composite)msg.getBody(List.class).get(0);
        if(comp != null)
        {
            System.out.println("comp name is " + comp.getName());
            Boolean retVal = Boolean.FALSE;

            MessageContentsList mcl = new MessageContentsList();
            mcl.add(retVal);
            exchange.getOut().setBody(mcl);
        }
        
        return Boolean.TRUE;
    }


Here is the spring configuration:
<?xml version="1.0" encoding="UTF-8"?>
<beans
  xmlns="http://www.springframework.org/schema/beans";
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
  xmlns:jaxws="http://cxf.apache.org/jaxws";
  xmlns:soap="http://cxf.apache.org/bindings/soap";
  xmlns:cxf="http://activemq.apache.org/camel/schema/cxfEndpoint";
  xsi:schemaLocation="
    http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
    http://activemq.apache.org/camel/schema/cxfEndpoint 
http://activemq.apache.org/camel/schema/cxfEndpoint/camel-cxf.xsd
    http://activemq.apache.org/camel/schema/spring
http://activemq.apache.org/camel/schema/spring/camel-spring.xsd
    http://cxf.apache.org/bindings/soap
http://cxf.apache.org/schemas/configuration/soap.xsd  
    http://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.xsd";>


  <import resource="classpath:META-INF/cxf/cxf.xml" />
  <import resource="classpath:META-INF/cxf/cxf-extension-soap.xml" />
  <import resource="classpath:META-INF/cxf/cxf-servlet.xml" />

  <bean
    id="transformationServ"
    class="com.rulestream.core.knowledge.bso.impl.TransformationServiceImpl"
/>

  <bean
    id="compServ"
    class="com.rulestream.core.knowledge.bso.impl.CompServiceImpl">
    <property
      name="transformationService"
      ref="transformationServ" />
    <property
      name="compositeVersionDAO"
      ref="compositeVersionDAO" />
    <property
      name="compositeDAO"
      ref="compositeDAO" />
  </bean>

  <bean
    id="compositeWs"
   
class="com.rulestream.services.knowledge.ws.impl.CompositeWebServiceImpl">
    <property
      name="entityBSO"
      ref="compositeServ" />
  </bean>

  <jaxws:endpoint name="CompositeServiceJax"
                  address="/CompositeService"
                  serviceName="t:CompositeService"
                  xmlns:t="http://core.rulestream.com/composite";>
    <jaxws:implementor>
        <ref bean="compositeWs"/>
    </jaxws:implementor>
    <jaxws:features>
      <bean class="org.apache.cxf.feature.LoggingFeature"/>
    </jaxws:features>
    <jaxws:binding>
       <soap:soapBinding version="1.2"/>
    </jaxws:binding>
  </jaxws:endpoint>

  <cxf:cxfEndpoint
    id="compService"
   
serviceClass="com.rulestream.services.knowledge.ws.impl.CompositeWebServiceImpl"
    address="/CompositeRouterService"
    endpointName="t:CompositeRouter"
    serviceName="t:CompositeRouterService"
    xmlns:t="http://core.rulestream.com/composite";>
  </cxf:cxfEndpoint>

  <bean
    id="createBean"
    class="org.apache.camel.example.cxf.provider.CreateTesterBean" />
  <bean
    id="retrieveBean"
    class="org.apache.camel.example.cxf.provider.RetrieveTesterBean" />

  <camelContext
    id="test_context"
    xmlns="http://activemq.apache.org/camel/schema/spring";>
    <route>
      <from uri="cxf://bean:compService" />
      <choice>
        <when>
          <groovy>exchange.in.headers.operationName == 'create'</groovy>
           <to uri="bean:createBean?methodName=process" />
        </when>
        <when>
          <groovy>exchange.in.headers.operationName == 'retrieve'</groovy>
           <to uri="bean:retrieveBean?methodName=processRetrieve" />
        </when>
      </choice>
    </route>
  </camelContext>



</beans>





willem.jiang wrote:
> 
> Hi Evgeny
> 
> You can do it by implementing a customer Invoker[1][2] just like the 
> CamelInvoker[3], which will perform the invocation to the java bean and 
> pass the parameter to the camel context.
> And you need to add some codes to handle the (?)-endpoint's 
> configuration which could be same with camel-cxf endpoint.
> 
> But In this way, we just pass the parameter to the camel context, the 
> response from the camel will be useless for us.
> 
> [1]https://svn.apache.org/repos/asf/incubator/cxf/trunk/api/src/main/java/org/apache/cxf/service/invoker/Invoker.java
> [2]http://cwiki.apache.org/CXF20DOC/invokers.html
> [3]https://svn.apache.org/repos/asf/activemq/camel/trunk/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/CamelInvoker.java
> 
> Regards,
> 
> Willem
> pevgen wrote:
>> Thank you, Willem.
>>
>> I understood your decision.
>> And i think, that may be create (?)-consumer (with cxf base), which can
>> create a full web-service from the clear java bean.
>>
>> for example
>>
>>
>>   
>>> class MyJavaBean {
>>>   public String getEcho(String value){
>>>    return " echo:" + value; }
>>> }
>>>
>>> and in the config-endpoint
>>> <... serviceClass="MyJavaBean"
>>>     
>>>     
>> when client call the web-service (method "getEcho"), then (?)-endpoint
>> run
>> the method "getEcho" of "MyJavaBean" and return the result to the client.
>> and parameter will be to transmit in the some "to"-endpoint.
>>
>> Thanks
>>
>> Evgeny
>>
>>   
> 
> 
> 



-- 
View this message in context: 
http://www.nabble.com/webservice-response-tp16960229s22882p17068846.html
Sent from the Camel - Users mailing list archive at Nabble.com.

Reply via email to