0

web-service以前に を使用していたクライアントをaxis、現在使用するようにアップグレードしていますCXFweb-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>

ご覧のとおり、 とmessageoperationに記載されています。 を介してを呼び出すWSDLと、 のバインド スタイルWRAPPEDが選択されます。これで問題ありません。/を介して生成された私の古いクラスには、クラスをパラメーター型として使用し、戻り値の型を持たないスタイルのすべてのメソッドもありました。wsdl2javacxf-codegen-plugin*PortTypeaxistools-maven-pluginwsdl2javaWRAPPEDHolder

しかし、私の問題は、以前に を使用してクラスaxistools-maven-pluginを生成していたときに、インターフェイスのニーズに合わせてjavaすべての*Holderクラスも自動的に生成されたことです。*PortTypeしかし、cx-codegen-pluginでは、インターフェイスのみがパラメータの型を必要とするスタイルを*PortType反映します。!の一部として生成されたクラスが表示されません。WRAPPEDHolderOUT*Holderwsdl2java

クラスを自分で作成せずに、クラスcxf-codegen-pluginを生成する方法はありますか? 多くのリファクタリングを意味するため、バインディング スタイルに切り替えたくありません。前述のように、どちらも変更できません。*Holderwsdl2javaBAREWSDL

私はfwiwv3.0.2のデータバインディングを使用しcxf-codegen-pluginています。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
);
4

1 に答える 1

0

Holderクラスを生成する必要はありません。これは JAX-WS の一部です。

コンパイラで使用されている JDK のバージョンを確認することをお勧めします。私が知る限り、JAX-WS はバージョン 6 の Java SE に含まれていたので、コンパイラが Java SE 5 を使用している場合、それが問題になる可能性があります。

于 2015-11-04T11:57:33.077 に答える