2011-09-05 158 views
0

我已經創建了使用Java和軸2.我收到輸出如下一個簡單的網絡服務,刪除自定義標籤

輸入 - 的http://本地主機:8088/Newwww/?服務/ NEWFILE/NEWFILE S =新建%20data3

輸出 -

<ns:newFileResponse xmlns:ns="http://Services.tcs.com"> 
- <ns:return> 
- <TestData> 
    <testData1>New data1</testData1> 
    <testData2>New data2</testData2> 
    <testData3>New data3</testData3> 
    </TestData> 
    </ns:return> 
    </ns:newFileResponse> 

如何刪除標籤開始與NS: 總之我想回應只有

<TestData> 
    <testData1>New data1</testData1> 
    <testData2>New data2</testData2> 
    <testData3>New data3</testData3> 
    </TestData> 

我的WSDL文件看起來像這樣

<?xml version="1.0" encoding="UTF-8" ?> 
- <wsdl:definitions xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:ns1="http://org.apache.axis2/xsd" xmlns:ns="http://Services.tcs.com" xmlns:wsaw="http://www.w3.org/2006/05/addressing/wsdl" xmlns:http="http://schemas.xmlsoap.org/wsdl/http/" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:soap12="http://schemas.xmlsoap.org/wsdl/soap12/" targetNamespace="http://Services.tcs.com"> 
    <wsdl:documentation>Please Type your service description here</wsdl:documentation> 
- <wsdl:types> 
- <xs:schema attributeFormDefault="qualified" elementFormDefault="qualified" targetNamespace="http://Services.tcs.com"> 
- <xs:element name="newFile"> 
- <xs:complexType> 
- <xs:sequence> 
    <xs:element minOccurs="0" name="s" nillable="true" type="xs:string" /> 
    </xs:sequence> 
    </xs:complexType> 
    </xs:element> 
- <xs:element name="newFileResponse"> 
- <xs:complexType> 
- <xs:sequence> 
    <xs:element minOccurs="0" name="return" nillable="true" type="xs:anyType" /> 
    </xs:sequence> 
    </xs:complexType> 
    </xs:element> 
    </xs:schema> 
    </wsdl:types> 
- <wsdl:message name="newFileRequest"> 
    <wsdl:part name="parameters" element="ns:newFile" /> 
    </wsdl:message> 
- <wsdl:message name="newFileResponse"> 
    <wsdl:part name="parameters" element="ns:newFileResponse" /> 
    </wsdl:message> 
- <wsdl:portType name="NewFilePortType"> 
- <wsdl:operation name="newFile"> 
    <wsdl:input message="ns:newFileRequest" wsaw:Action="urn:newFile" /> 
    <wsdl:output message="ns:newFileResponse" wsaw:Action="urn:newFileResponse" /> 
    </wsdl:operation> 
    </wsdl:portType> 
- <wsdl:binding name="NewFileSoap11Binding" type="ns:NewFilePortType"> 
    <soap:binding transport="http://schemas.xmlsoap.org/soap/http" style="document" /> 
- <wsdl:operation name="newFile"> 
    <soap:operation soapAction="urn:newFile" style="document" /> 
- <wsdl:input> 
    <soap:body use="literal" /> 
    </wsdl:input> 
- <wsdl:output> 
    <soap:body use="literal" /> 
    </wsdl:output> 
    </wsdl:operation> 
    </wsdl:binding> 
- <wsdl:binding name="NewFileSoap12Binding" type="ns:NewFilePortType"> 
    <soap12:binding transport="http://schemas.xmlsoap.org/soap/http" style="document" /> 
- <wsdl:operation name="newFile"> 
    <soap12:operation soapAction="urn:newFile" style="document" /> 
- <wsdl:input> 
    <soap12:body use="literal" /> 
    </wsdl:input> 
- <wsdl:output> 
    <soap12:body use="literal" /> 
    </wsdl:output> 
    </wsdl:operation> 
    </wsdl:binding> 
- <wsdl:binding name="NewFileHttpBinding" type="ns:NewFilePortType"> 
    <http:binding verb="POST" /> 
- <wsdl:operation name="newFile"> 
    <http:operation location="NewFile/newFile" /> 
- <wsdl:input> 
    <mime:content type="text/xml" part="newFile" /> 
    </wsdl:input> 
- <wsdl:output> 
    <mime:content type="text/xml" part="newFile" /> 
    </wsdl:output> 
    </wsdl:operation> 
    </wsdl:binding> 
- <wsdl:service name="NewFile"> 
- <wsdl:port name="NewFileHttpSoap11Endpoint" binding="ns:NewFileSoap11Binding"> 
    <soap:address location="http://localhost:8088/Newwww/services/NewFile.NewFileHttpSoap11Endpoint/" /> 
    </wsdl:port> 
- <wsdl:port name="NewFileHttpSoap12Endpoint" binding="ns:NewFileSoap12Binding"> 
    <soap12:address location="http://localhost:8088/Newwww/services/NewFile.NewFileHttpSoap12Endpoint/" /> 
    </wsdl:port> 
- <wsdl:port name="NewFileHttpEndpoint" binding="ns:NewFileHttpBinding"> 
    <http:address location="http://localhost:8088/Newwww/services/NewFile.NewFileHttpEndpoint/" /> 
    </wsdl:port> 
    </wsdl:service> 
    </wsdl:definitions> 

謝謝..

+0

請發表您的定義文件(WSDL)在這裏。您正在獲取的XML看起來像你的響應數據集包裹在操作體標籤(newFileResponse) –

+0

我已經發布了它..你可以幫助我... – SSG

+0

它在張貼的WSDL中擴展.. – SSG

回答

1

沒有直接的方法來做到這一點。有兩種選擇。

  1. 使用合同第一種方法[1]。

在那裏您需要修改生成的wsdl for suite或創建一個新的wsdl並使用wsdl2java工具生成該代碼並部署該服務。

  1. 使用ESB進行響應轉換。

在這裏,您可以在ESB中創建代理服務,並在out序列[2]中對響應進行任何轉換。

[1] http://wso2.org/library/2873 [2] http://wso2.org/project/esb/java/4.0.0/docs/samples/message_mediation_samples.html#Sample8

1

你的WSDL揭示你與Web服務最差的反模式之一的使用:anyType的使用。 你的接口應該定義什麼樣的數據被其他部分發送和接受 - 使用anyType強制接口的兩端知道另一端的內部。

<xs:element name="newFileResponse"> 
    <xs:complexType> 
    <xs:sequence> 
     <xs:element minOccurs="0" name="return" nillable="true" type="xs:anyType" /> 
    </xs:sequence> 
    </xs:complexType> 
</xs:element> 

而且,由於要定義「newFileResponse」(元件),作爲「newFileResponse」(消息)消息部分,則當然會收到newFileResponse元件作爲內容。

首先:擺脫anyType,在你的界面中定義testdate元素。

第二:重命名您的元素和消息,使它們不具有相同的名稱 - 這是爲了提高可讀性。

三:使用類似的郵件

<wsdl:message name="newFileResponse"> 
    <wsdl:part name="parameters" element="ns:TestData" /> 
</wsdl:message> 

下面通過定義TESTDATA爲您的消息的一部分,而不是anyType的吃newFileResponse元素,你擺脫混淆包裝元素,並得到直接使用TestData類型。