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>

任务运行没有任何错误。它创建不同的 java 文件,还有 Knowledgebase.java 和 KnowledgebasePort.java。在 der 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

如果我们使用例如 java 1.6.0_27 和 Metro 2.2,我们需要 ENDORSE webservices-api.jar。

  1. 我们必须把这个 jar 放到文件夹java-install-dir\jre\lib\endorsed\
  2. 如果使用 Eclipse,我们必须确保使用目录中的正确 JRE java-install-dir。这是在 Window->Preferences->Java->Installed JREs->Add 中完成的。

现在错误“构造函数服务(...)未定义”应该消失。

于 2012-11-06T16:16:59.753 回答
1

您可以设置 xendorsed="true" 和 xnocompile="false" 并让 ant 编译您生成的 java 文件,它对我有用

<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 回答