2

I have a problem with a maven project using wsdl first and Camel CXF+Spring deployed on JBoss Fuse. Calling the service the following exception occurs:

12:21:58,961 | WARN  | qtp477359063-69  | PhaseInterceptorChain            | 74 - org.apache.cxf.cxf-core - 3.0.4.redhat-621084 | Interceptor for {http://service.opf.meter.itd.it}OpfImpl#{http://service.opf.meter.itd.it}getOpf has thrown exception, unwinding now
java.lang.IllegalArgumentException: Part {http://service.opf.meter.itd.it}getOpfResponse should be of type it.itd.meter.opf.service.GetOpfResponse, not java.lang.String
        at org.apache.cxf.jaxb.io.DataWriterImpl.checkPart(DataWriterImpl.java:292)[79:org.apache.cxf.cxf-rt-databinding-jaxb:3.0.4.redhat-621084]
        at org.apache.cxf.jaxb.io.DataWriterImpl.write(DataWriterImpl.java:220)[79:org.apache.cxf.cxf-rt-databinding-jaxb:3.0.4.redhat-621084]
        at org.apache.cxf.interceptor.AbstractOutDatabindingInterceptor.writeParts(AbstractOutDatabindingInterceptor.java:122)[74:org.apache.cxf.cxf-core:3.0.4.redhat-621084]
        at org.apache.cxf.wsdl.interceptors.BareOutInterceptor.handleMessage(BareOutInterceptor.java:69)[78:org.apache.cxf.cxf-rt-wsdl:3.0.4.redhat-621084]
        at org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:307)[74:org.apache.cxf.cxf-core:3.0.4.redhat-621084]
        at org.apache.cxf.interceptor.OutgoingChainInterceptor.handleMessage(OutgoingChainInterceptor.java:83)[74:org.apache.cxf.cxf-core:3.0.4.redhat-621084]
        at org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:307)[74:org.apache.cxf.cxf-core:3.0.4.redhat-621084]
        at org.apache.cxf.phase.PhaseInterceptorChain.resume(PhaseInterceptorChain.java:277)[74:org.apache.cxf.cxf-core:3.0.4.redhat-621084]
        at org.apache.cxf.transport.ChainInitiationObserver.onMessage(ChainInitiationObserver.java:78)[74:org.apache.cxf.cxf-core:3.0.4.redhat-621084]
        at org.apache.cxf.transport.http.AbstractHTTPDestination.invoke(AbstractHTTPDestination.java:251)[96:org.apache.cxf.cxf-rt-transports-http:3.0.4.redhat-621084]
        at org.apache.cxf.transport.servlet.ServletController.invokeDestination(ServletController.java:234)[96:org.apache.cxf.cxf-rt-transports-http:3.0.4.redhat-621084]
        at org.apache.cxf.transport.servlet.ServletController.invoke(ServletController.java:208)[96:org.apache.cxf.cxf-rt-transports-http:3.0.4.redhat-621084]
        at org.apache.cxf.transport.servlet.ServletController.invoke(ServletController.java:160)[96:org.apache.cxf.cxf-rt-transports-http:3.0.4.redhat-621084]
        at org.apache.cxf.transport.servlet.CXFNonSpringServlet.invoke(CXFNonSpringServlet.java:171)[96:org.apache.cxf.cxf-rt-transports-http:3.0.4.redhat-621084]
        at org.apache.cxf.transport.servlet.AbstractHTTPServlet.handleRequest(AbstractHTTPServlet.java:293)[96:org.apache.cxf.cxf-rt-transports-http:3.0.4.redhat-621084]
        at org.apache.cxf.transport.servlet.AbstractHTTPServlet.doPost(AbstractHTTPServlet.java:212)[96:org.apache.cxf.cxf-rt-transports-http:3.0.4.redhat-621084]
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:595)[82:org.apache.geronimo.specs.geronimo-servlet_3.0_spec:1.0.0]
        at org.apache.cxf.transport.servlet.AbstractHTTPServlet.service(AbstractHTTPServlet.java:268)[96:org.apache.cxf.cxf-rt-transports-http:3.0.4.redhat-621084]
        at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:684)[86:org.eclipse.jetty.aggregate.jetty-all-server:8.1.17.v20150415]
        at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:503)[86:org.eclipse.jetty.aggregate.jetty-all-server:8.1.17.v20150415]
        at org.ops4j.pax.web.service.jetty.internal.HttpServiceServletHandler.doHandle(HttpServiceServletHandler.java:69)[93:org.ops4j.pax.web.pax-web-jetty:3.2.5]
        at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:137)[86:org.eclipse.jetty.aggregate.jetty-all-server:8.1.17.v20150415]
        at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:533)[86:org.eclipse.jetty.aggregate.jetty-all-server:8.1.17.v20150415]
        at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:231)[86:org.eclipse.jetty.aggregate.jetty-all-server:8.1.17.v20150415]
        at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1086)[86:org.eclipse.jetty.aggregate.jetty-all-server:8.1.17.v20150415]
        at org.ops4j.pax.web.service.jetty.internal.HttpServiceContext.doHandle(HttpServiceContext.java:240)[93:org.ops4j.pax.web.pax-web-jetty:3.2.5]
        at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:429)[86:org.eclipse.jetty.aggregate.jetty-all-server:8.1.17.v20150415]
        at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:193)[86:org.eclipse.jetty.aggregate.jetty-all-server:8.1.17.v20150415]
        at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1020)[86:org.eclipse.jetty.aggregate.jetty-all-server:8.1.17.v20150415]
        at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:135)[86:org.eclipse.jetty.aggregate.jetty-all-server:8.1.17.v20150415]
        at org.ops4j.pax.web.service.jetty.internal.JettyServerHandlerCollection.handle(JettyServerHandlerCollection.java:75)[93:org.ops4j.pax.web.pax-web-jetty:3.2.5]
        at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:116)[86:org.eclipse.jetty.aggregate.jetty-all-server:8.1.17.v20150415]
        at org.eclipse.jetty.server.Server.handleAsync(Server.java:410)[86:org.eclipse.jetty.aggregate.jetty-all-server:8.1.17.v20150415]
        at org.eclipse.jetty.server.AbstractHttpConnection.handleRequest(AbstractHttpConnection.java:519)[86:org.eclipse.jetty.aggregate.jetty-all-server:8.1.17.v20150415]
        at org.eclipse.jetty.server.AbstractHttpConnection.content(AbstractHttpConnection.java:982)[86:org.eclipse.jetty.aggregate.jetty-all-server:8.1.17.v20150415]
        at org.eclipse.jetty.server.AbstractHttpConnection$RequestHandler.content(AbstractHttpConnection.java:1043)[86:org.eclipse.jetty.aggregate.jetty-all-server:8.1.17.v20150415]
        at org.eclipse.jetty.http.HttpParser.parseNext(HttpParser.java:865)[86:org.eclipse.jetty.aggregate.jetty-all-server:8.1.17.v20150415]
        at org.eclipse.jetty.http.HttpParser.parseAvailable(HttpParser.java:240)[86:org.eclipse.jetty.aggregate.jetty-all-server:8.1.17.v20150415]
        at org.eclipse.jetty.server.AsyncHttpConnection.handle(AsyncHttpConnection.java:82)[86:org.eclipse.jetty.aggregate.jetty-all-server:8.1.17.v20150415]
        at org.eclipse.jetty.io.nio.SelectChannelEndPoint.handle(SelectChannelEndPoint.java:696)[86:org.eclipse.jetty.aggregate.jetty-all-server:8.1.17.v20150415]
        at org.eclipse.jetty.io.nio.SelectChannelEndPoint$1.run(SelectChannelEndPoint.java:53)[86:org.eclipse.jetty.aggregate.jetty-all-server:8.1.17.v20150415]
        at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:608)[86:org.eclipse.jetty.aggregate.jetty-all-server:8.1.17.v20150415]
        at org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:543)[86:org.eclipse.jetty.aggregate.jetty-all-server:8.1.17.v20150415]
        at java.lang.Thread.run(Thread.java:745)[:1.7.0_101]

Here is my wsdl:

<wsdl:definitions targetNamespace="http://service.opf.meter.itd.it" 
        xmlns:apachesoap="http://xml.apache.org/xml-soap" 
        xmlns:impl="http://service.opf.meter.itd.it" 
        xmlns:intf="http://service.opf.meter.itd.it" 
        xmlns:tns1="http://bean.opf.meter.itd.it" 
        xmlns:tns2="http://branch.bean.opf.meter.itd.it" 
        xmlns:tns3="http://bus.bean.opf.meter.itd.it" 
        xmlns:tns4="http://constrain.bean.opf.meter.itd.it" 
        xmlns:tns5="http://summary.bean.opf.meter.itd.it" 
        xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" 
        xmlns:wsdlsoap="http://schemas.xmlsoap.org/wsdl/soap/" 
        xmlns:xsd="http://www.w3.org/2001/XMLSchema">

(type omitted...)

       <wsdl:message name="getOpfResponse">
          <wsdl:part element="impl:getOpfResponse" name="getOpfResponse">
          </wsdl:part>
       </wsdl:message>
       <wsdl:message name="getOpfRequest">
      <wsdl:part element="impl:getOpfRequest" name="getOpfRequest">
      </wsdl:part>
   </wsdl:message>

   <wsdl:portType name="OpfImpl">
      <wsdl:operation name="getOpf">
         <wsdl:input message="impl:getOpfRequest"></wsdl:input>
         <wsdl:output message="impl:getOpfResponse"></wsdl:output>
      </wsdl:operation>
   </wsdl:portType>

   <wsdl:binding name="OpfImplSoapBinding" type="impl:OpfImpl">
      <wsdlsoap:binding transport="http://schemas.xmlsoap.org/soap/http"/>
      <wsdl:operation name="getOpf">
         <wsdlsoap:operation soapAction="" style="document"/>
         <wsdl:input>
            <wsdlsoap:body parts="getOpfRequest" use="literal"/>
         </wsdl:input>
         <wsdl:output>
            <wsdlsoap:body parts="getOpfResponse" use="literal"/>
         </wsdl:output>
      </wsdl:operation>
   </wsdl:binding>

   <wsdl:service name="OpfImpl">
      <wsdl:port binding="impl:OpfImplSoapBinding" name="DummyOpf">
         <wsdlsoap:address location="http://192.168.80.125:8181/cxf/OptimalPowerFlow/"/>
      </wsdl:port>
   </wsdl:service>
</wsdl:definitions>

The (generated) interface:

package it.itd.meter.opf.service;

import javax.jws.WebMethod;
import javax.jws.WebParam;
import javax.jws.WebResult;
import javax.jws.WebService;
import javax.jws.soap.SOAPBinding;
import javax.xml.bind.annotation.XmlSeeAlso;

/**
 * This class was generated by Apache CXF 2.7.0.redhat-611423
 * 2017-03-16T10:52:40.701+01:00
 * Generated source version: 2.7.0.redhat-611423
 * 
 */
@WebService(targetNamespace = "http://service.opf.meter.itd.it", name = "OpfImpl")
@XmlSeeAlso({ObjectFactory.class, it.itd.meter.opf.bean.summary.ObjectFactory.class, it.itd.meter.opf.bean.bus.ObjectFactory.class, it.itd.meter.opf.bean.constrain.ObjectFactory.class, it.itd.meter.opf.bean.ObjectFactory.class, it.itd.meter.opf.bean.branch.ObjectFactory.class})
@SOAPBinding(parameterStyle = SOAPBinding.ParameterStyle.BARE)
public interface OpfImpl {

    @WebMethod(action = "http://service.opf.meter.itd.it/getOpf")
    @WebResult(name = "getOpfResponse", targetNamespace = "http://service.opf.meter.itd.it", partName = "getOpfResponse")
    public GetOpfResponse getOpf(
        @WebParam(partName = "getOpfRequest", name = "getOpfRequest", targetNamespace = "http://service.opf.meter.itd.it")
        GetOpfRequest getOpfRequest
    );
}

so the implementation:

@javax.jws.WebService(
    serviceName = "OpfImpl",
    portName = "DummyOpf",
    targetNamespace = "http://service.opf.meter.itd.it",
    wsdlLocation = "file:/home/meter/workdir/OptimalPowerFlow/src/main/resources/wsdl/OpfImpl.wsdl",
    endpointInterface = "it.itd.meter.opf.service.OpfImpl")
public class DummyOpf implements OpfImpl {


    private static final Logger LOG = Logger.getLogger(DummyOpf.class.getName());

    @Override
    public GetOpfResponse getOpf(GetOpfRequest getOpfRequest) {
        System.out.println(getOpfRequest);
        LOG.info(getOpfRequest.toString());
        try{
            OpfBean data = populateOpf();
            GetOpfResponse getOpfResponse = new GetOpfResponse();
            getOpfResponse.setGetOpfReturn(data);
            return getOpfResponse;
        }catch(Exception e){
            e.printStackTrace();
            return null;

        }

    }

}

Finally, the route configuration:

camel-cxf.xml

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

  <cxf:cxfEndpoint id="getOpfEndpoint"
                   address="/OptimalPowerFlow/"
                   serviceClass="it.itd.meter.opf.service.OpfImpl"
                   wsdlURL="wsdl/OpfImpl.wsdl"/>
  <bean id="getDummyOpf" class=" it.itd.meter.OptimalPowerFlow.DummyOpf"/>
</beans>

camel-route.xml

<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"
       xsi:schemaLocation="
         http://www.springframework.org/schema/beans 
         http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
         http://camel.apache.org/schema/spring 
         http://camel.apache.org/schema/spring/camel-spring.xsd">

  <import resource="classpath:META-INF/spring/camel-cxf.xml" />

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

    <route>
      <!-- route starts from the cxf webservice, see camel-cxf.xml for details -->
      <from uri="cxf:bean:getOpfEndpoint" />
      <bean ref="getDummyOpf"/>
      <to uri="seda:incomingOrders" />
      <!-- and then create the OK reply for the webservice which is still waiting for a reply -->
      <transform>
        <constant>OK</constant>
      </transform>
    </route>

    <!-- test route -->
    <route>
      <from uri="seda:incomingOrders" />
      <to uri="mock:end"/>
    </route>
  </camelContext>

</beans>

Any suggestion?

0 Answers0