CXF プロジェクトが正常に動作しています。
私のWSインターフェースは
package net.betlista.ws;
import javax.jws.WebMethod;
import javax.jws.WebService;
import org.apache.cxf.annotations.EndpointProperty;
@WebService
public interface TestWs {
@WebMethod
Result foo(String child);
}
実装は
package net.betlista.ws;
import org.springframework.stereotype.Component;
@Component("testWsEndpoint")
public class TestWsImpl implements TestWs {
@Override
public Result foo(final String child) {
Result res = new Result();
res.status = "ok";
res.data = "bar";
return res;
}
}
結果型クラス:
package net.betlista.ws;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlType;
//@XmlTransient - NOT working
@XmlType
//@SOAPBinding(parameterStyle=SOAPBinding.ParameterStyle.BARE) - NOT working
public class Result {
@XmlElement
String status;
@XmlElement
String data;
}
リクエストでWSを呼び出すと:
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ws="http://ws.betlista.net/">
<soapenv:Header/>
<soapenv:Body>
<ws:foo>
<arg0>a</arg0>
</ws:foo>
</soapenv:Body>
</soapenv:Envelope>
結果は次のとおりです。
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<ns2:fooResponse xmlns:ns2="http://ws.betlista.net/">
<return>
<status>ok</status>
<data>bar</data>
</return>
</ns2:fooResponse>
</soap:Body>
</soap:Envelope>
return
そして、この要素をスキップしたいと思います。
私がしたい:
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<ns2:fooResponse xmlns:ns2="http://ws.betlista.net/">
<status>ok</status>
<data>bar</data>
</ns2:fooResponse>
</soap:Body>
</soap:Envelope>
私はこの質問を見つけましたが、これを使用すると、要素arg
もリクエストから欠落しています。これは、私が望まないものです。
この@SOAPBinding
注釈をメソッド (上記のように機能) とタイプResult
(機能しない) に使用しようとしました。
要求された WSDL:
<?xml version='1.0' encoding='UTF-8'?><wsdl:definitions xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:tns="http://ws.betlista.net/" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:ns1="http://schemas.xmlsoap.org/soap/http" name="TestWsImplService" targetNamespace="http://ws.betlista.net/">
<wsdl:types>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:tns="http://ws.betlista.net/" elementFormDefault="unqualified" targetNamespace="http://ws.betlista.net/" version="1.0">
<xs:element name="foo" type="tns:foo"/>
<xs:element name="fooResponse" type="tns:fooResponse"/>
<xs:complexType name="foo">
<xs:sequence>
<xs:element minOccurs="0" name="arg0" type="xs:string"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="fooResponse">
<xs:sequence>
<xs:element minOccurs="0" name="return" type="tns:result"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="result">
<xs:sequence>
<xs:element minOccurs="0" name="status" type="xs:string"/>
<xs:element minOccurs="0" name="data" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:schema>
</wsdl:types>
<wsdl:message name="foo">
<wsdl:part element="tns:foo" name="parameters">
</wsdl:part>
</wsdl:message>
<wsdl:message name="fooResponse">
<wsdl:part element="tns:fooResponse" name="parameters">
</wsdl:part>
</wsdl:message>
<wsdl:portType name="TestWs">
<wsdl:operation name="foo">
<wsdl:input message="tns:foo" name="foo">
</wsdl:input>
<wsdl:output message="tns:fooResponse" name="fooResponse">
</wsdl:output>
</wsdl:operation>
</wsdl:portType>
<wsdl:binding name="TestWsImplServiceSoapBinding" type="tns:TestWs">
<soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
<wsdl:operation name="foo">
<soap:operation soapAction="" style="document"/>
<wsdl:input name="foo">
<soap:body use="literal"/>
</wsdl:input>
<wsdl:output name="fooResponse">
<soap:body use="literal"/>
</wsdl:output>
</wsdl:operation>
</wsdl:binding>
<wsdl:service name="TestWsImplService">
<wsdl:port binding="tns:TestWsImplServiceSoapBinding" name="TestWsImplPort">
<soap:address location="http://localhost:8080/tests-wicket-cxf/ws/TestWs"/>
</wsdl:port>
</wsdl:service>
</wsdl:definitions>