簡體   English   中英

CXF-CODEGEN生成的客戶端需要肥皂信封上的命名空間

[英]CXF-CODEGEN generated client needs namespace on the soap envelope

CXF生成的客戶端發送以下SOAP請求,該請求不會從其端返回記錄:

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

SoapUI請求如下所示,並返回記錄:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:tlo="http://tlo.com/">
   <soapenv:Header/>
   <soapenv:Body>
      <tlo:PersonSearch>
         <!--Optional:-->
         <tlo:genericSearchInput>
             ...
         </tlo:genericSearchInput>
      </tlo:PersonSearch>
   </soapenv:Body>
</soapenv:Envelope>

我看到的唯一區別是默認名稱空間聲明位於而不是肥皂信封上的名稱空間聲明以及名稱空間前綴的使用。 我嘗試了幾種不同的方法來使CXF生成的客戶端創建相同類型的肥皂請求。 任何人都可以指點一下,還是我需要使用其他東西?

我在JDK 6上使用org.apache.cxf:cxf-codegen-plugin:2.5.2。

您是否使用JAXB進行數據綁定? 通過使用XMLBEANS,我能夠解決相同的問題。 請參閱wsdl2java的db標志: http ://cxf.apache.org/docs/wsdl-to-java.html

我仍在尋找一個更好的解決方案,而不僅僅是更改數據綁定。

更新20012-04-18:cxf用戶郵件列表中的Sergey和Aki很高興向我展示了CXF的TransformationFeature。 在客戶端使用以下代碼對我有用:

        MyService myService = new MyService();
        myPort = myService.getMyServiceHttpSoap11Endpoint();
        // See http://cxf.apache.org/docs/transformationfeature.html
        Client client = ClientProxy.getClient(myPort);

        Map<String, String> outTransformMap = Collections.singletonMap(
                "{http://myNamespace}*",
                "{http://myNamespace}*");
        org.apache.cxf.interceptor.transform.TransformOutInterceptor transformOutInterceptor =
                new org.apache.cxf.interceptor.transform.TransformOutInterceptor();
        transformOutInterceptor.setOutTransformElements(outTransformMap);
            client.getOutInterceptors().add(transformOutInterceptor);

我在CXF 2.5.2中使用它。 根據Aki使用2.5.3和2.5.6,則必須使用defaultNamespace屬性。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM