0

次の CXF Web サービスをヒューズ ブループリントで公開しています。ブループリントはファブリック プロファイルに展開されます。

<blueprint
    xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:camelcxf="http://camel.apache.org/schema/blueprint/cxf"
    xmlns:cxf="http://cxf.apache.org/blueprint/core"
    xmlns:cm="http://aries.apache.org/blueprint/xmlns/blueprint-cm/v1.1.0"
    xsi:schemaLocation="http://www.osgi.org/xmlns/blueprint/v1.0.0 http://www.osgi.org/xmlns/blueprint/v1.0.0/blueprint.xsd 
             http://camel.apache.org/schema/blueprint/cxf http://camel.apache.org/schema/blueprint/cxf/camel-cxf.xsd
             http://cxf.apache.org/blueprint/core http://cxf.apache.org/schemas/blueprint/core.xsd
             http://camel.apache.org/schema/blueprint http://camel.apache.org/schema/blueprint/camel-blueprint.xsd">

   <camelcxf:cxfEndpoint id="input-cxf" address="/myfuse-demo/"        
                        serviceClass="com.sample.SourceExampleWS" />      

   <camelContext id="fuse-demo-route-example-cxf" xmlns="http://camel.apache.org/schema/blueprint">

        <route id="demo-source-cxf">


            <from uri="cxf:bean:input-cxf"/>
            <transform>
                <simple>
                    ${in.body[0]}
                </simple>
            </transform>
            <log message="Received: ${in.body}"/>
            <!-- removed for brevity -->
        </route>
    </camelContext>

</blueprint>

SourceExampleWS は、次の単純なインターフェイスです。

package com.sample;

import javax.jws.WebMethod;
import javax.jws.WebParam;
import javax.jws.WebService;

@WebService
public interface SourceExampleWS {

     @WebMethod int call(  @WebParam( name = "struct")Struct s);
}

Struct クラスは単なる Java Bean です。

package com.sample;

@XmlRootElement
public class Struct implements java.io.Serializable {

public Struct()  {

}   
int x;
int y;


public int getX() {
   return x;
}


public int getY() {
   return y;
}

public void setX(int x) { this.x = x; }
public void setY(int y) { this.y = y; }
}

問題は、バンドルを Fabric にデプロイするときに、WebService の call メソッドを呼び出すことができないことです。

WSDL ( http://10.1.86.122:8182/cxf/myfuse-demo?wsdl ) から、SOAPUI は次の SOAP メッセージを生成します。

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:sam="http://sample.com/">
   <soapenv:Header/>
   <soapenv:Body>
      <sam:call>
         <sam:struct>
            <x>201</x>
            <y>144</y>
         </sam:struct>
      </sam:call>
   </soapenv:Body>
</soapenv:Envelope>

しかし、次のエラーが返されます。

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
   <soap:Body>
      <soap:Fault>
         <faultcode>soap:Client</faultcode>
         <faultstring>Unmarshalling Error: unexpected element (uri:"http://sample.com/", local:"struct"). Expected elements are &lt;{}struct></faultstring>
      </soap:Fault>
   </soap:Body>
</soap:Envelope>

名前空間「sam」をパケットから削除しましたが、別のエラーが発生します。

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
   <soap:Body>
      <soap:Fault>
         <faultcode>soap:Client</faultcode>
         <faultstring>Unexpected wrapper element call found.   Expected {http://sample.com/}call.</faultstring>
      </soap:Fault>
   </soap:Body>
</soap:Envelope>

問題を解決する方法はありますか? ありがとうございました!

4

1 に答える 1