我正在将web-service
以前使用的客户端升级axis
为现在使用CXF
. 请注意,web-service
属于第 3 方,因此我无权修改wsdl
自己。
<message name="doSomethingRequest">
<part name="parameters" element="doSomething" />
</message>
<message name="doSomethingResponse">
<part name="parameters" element="doSomethingResponse" />
</message>
<portType name="myServicePortType">
<operation name="doSomething">
<input message="doSomethingRequest" />
<output message="doSomethingResponse" />
</operation>
</portType>
如您所见,通过message
s 和operation
s 记录在 中的方式,当通过调用时选择WSDL
绑定样式,这很好。我的旧类,通过/生成的所有方法也具有样式中的所有方法,其中类作为参数类型并且没有返回类型。WRAPPED
wsdl2java
cxf-codegen-plugin
*PortType
axistools-maven-plugin
wsdl2java
WRAPPED
Holder
但我的问题是,当我以前使用axistools-maven-plugin
生成java
类时,我的所有*Holder
类也都是自动生成的,以匹配*PortType
接口需求。但是对于cx-codegen-plugin
,只有*PortType
接口反映了参数类型WRAPPED
需要的样式;我没有看到作为!的一部分生成的类。Holder
OUT
*Holder
wsdl2java
有什么方法可以让我cxf-codegen-plugin
生成*Holder
类作为其中的一部分,wsdl2java
而无需自己编写它们?我不想切换到BARE
绑定样式,因为这意味着大量的重构。我不能WSDL
像我之前提到的那样修改任何一个。
我使用v3.0.2
和数据绑定cxf-codegen-plugin
fwiw JAXB
。
@RequestWrapper(localName = "doSomething", targetNamespace = "...", className = "...DoSomething")
@WebMethod(action = "urn:#doSomething")
@ResponseWrapper(localName = "doSomethingResponse", targetNamespace = "...", className = "...DoSomethingResponse")
public void doSomething(
@WebParam(name = "requestParam1", targetNamespace = "...")
java.lang.String requestParam1,
@WebParam(name = "requestParam2", targetNamespace = "...")
java.lang.String requestParam2,
// the below holders for SomeType1 and SomeType2, i.e the SomeType1Holder and SomeType2Holder, are not auto-generated as part of the wsdl2java
@WebParam(mode = WebParam.Mode.OUT, name = "responseParam1", targetNamespace = "...")
javax.xml.ws.Holder<SomeType1> responseParam1,
@WebParam(mode = WebParam.Mode.OUT, name = "responseParam2", targetNamespace = "...")
javax.xml.ws.Holder<SomeType2> responseParam2
);