获取cxf-codegen-plugin以生成Holder类

时间:2015-01-12 17:12:15

标签: java web-services soap cxf cxf-codegen-plugin

我升级之前使用web-service的{​​{1}}客户端,现在使用axis。请注意,CXF属于第三方,因此我无权自行修改web-service

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> 中记录了messageoperationWSDL时会选择WRAPPED的绑定样式{通过wsdl2java调用{1}},这很好。通过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-pluginJAXB数据绑定fwiw。

@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
);

1 个答案:

答案 0 :(得分:0)

您不需要生成Holder类;它是JAX-WS的一部分。

您可能想要检查编译器使用的JDK版本。据我所知,JAX-WS包含在版本6的Java SE中,因此如果您的编译器使用的是Java SE 5 - 这可能是您的问题。