【问题标题】:wsimport generates faulty codewsimport 生成错误代码
【发布时间】:2011-07-05 16:32:14
【问题描述】:

我使用 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 或错误在哪里?

【问题讨论】:

    标签: java wsimport


    【解决方案1】:

    Service 对象由 Java EE SDK 提供。它在 Java EE 5 和 Java EE 6 之间添加了一个新的构造函数。您使用的 wsimport 似乎来自 Java EE 6 JDK,而编译器使用的是 Java EE 5 SDK?

    【讨论】:

    • 我担心这与此版本冲突有关 :-( 在我的项目设置中,我已将 Java Compiler > Compiler Compliance Level 设置为 1.6。还有什么不匹配的地方?
    • 那么这是在 Eclipse 中吗?您似乎也在使用 Ant。为了使用 wsimport,您需要使用 taskdef 定义它。你可以发布taskdef吗?您在类路径中使用什么?
    • 要使 JDK 使用不同的版本,您需要将新的 api jar 添加到该 JDK 本身,您将 jar 添加到背书目录。即 /jre/lib/endorsed。我在那个目录中有 jaxb-api 和 jaxws-api。
    【解决方案2】:

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

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

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

    【讨论】:

      【解决方案3】:

      您可以设置 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>
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-12-19
        • 2015-05-20
        • 2013-04-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多