3

wsimport を使用して Java スタブ ファイルを生成します。このために、Eclipse で ant ビルド ファイルを使用します。

<taskdef name="wsimport" classname="com.sun.tools.ws.ant.WsImport">
    <classpath>
        <fileset dir="../lib">
            <include name="jaxws-tools.jar" />
        </fileset>
    </classpath>
</taskdef>

<target name="generate">
    <wsimport wsdl="../wsdl/Knowledgebase.wsdl"
              destdir="../bin"
              sourcedestdir="../gen"
              keep="true"
              xendorsed="true">
    </wsimport>
</target>

タスクはエラーなしで実行されます。Knowledgebase.java および KnowledgebasePort.java など、さまざまな Java ファイルが作成されます。Knowledgebase.java には、次のコンストラクタがあります。

public Knowledgebase(WebServiceFeature... features) {
    super(__getWsdlLocation(), KNOWLEDGEBASE_QNAME, features);
}

それらの場合、「コンストラクター Service(...) は未定義です」というエラーが表示されます。現在の jax-ws jar ファイルをインポートしました。生成プロセスが壊れていますか?間違った jar を使用していますか?それともエラーはどこにありますか?

4

3 に答える 3

4

Service オブジェクトは、Java EE SDK によって提供されます。Java EE 5 と Java EE 6 の間に新しいコンストラクターが追加されました。使用している wsimport は Java EE 6 JDK のものであり、コンパイラーは Java EE 5 SDK を使用しているように見えますか?

于 2011-07-05T17:19:00.847 に答える
2

たとえば、java1.6.0_27とMetro2.2を使用している場合は、webservices-api.jarを承認する必要があります。

  1. このjarをフォルダjava-install-dir\jre\ lib \endorsed\に配置する必要があります
  2. Eclipseを使用する場合は、ディレクトリから正しいJREを使用していることを確認する必要がありますjava-install-dir。これは、「ウィンドウ」->「設定」->「Java」->「インストールされたJRE」->「追加」で実行されます。

これで、「コンストラクターService(...)が未定義です」というエラーが消えるはずです。

于 2012-11-06T16:16:59.753 に答える
1

xendorsed="true" および xnocompile="false" を設定して、生成された Java ファイルを ant にコンパイルさせることができます。

<taskdef name="wsimport" classname="com.sun.tools.ws.ant.WsImport">
        <classpath>
            <fileset dir="${ext.myproject.path}/lib">
                <include name="*.jar"/>
            </fileset>
            <fileset dir="${platformhome}/resources/ant/lib">
                <include name="*.jar"/>
            </fileset>
        </classpath>    
</taskdef>

<macrodef name="myproject_before_compile_core">
        <sequential>
            <mkdir dir="${ext.myproject.path}/gensrc"/>
            <mkdir dir="${ext.myproject.path}/classes"/>
            <echo message="Generating WS stubs for Simulate BOM Service"/>
            <wsimport wsdl="${ext.myproject.path}/resources/wsdl/service.wsdl" package="com.xx.energy.yy.xyz.ws.stubs.service" xnocompile="false" destdir="${ext.myproject.path}/classes" sourcedestdir="${ext.myproject.path}/gensrc" keep="true" wsdlLocation="${ext.myproject.path}/resources/wsdl" xendorsed="true">
                <produces dir="${ext.myproject.path}/gensrc/com/xx/energy/yy/xyz/ws/stubs/service">
                    <include name="*.java"/>
                </produces>
                <depends file="${ext.myproject.path}/resources/wsdl/service.wsdl"/>
            </wsimport>
        </sequential>
    </macrodef>
于 2013-03-06T11:32:27.993 に答える