Java wsimport生成错误代码

Java wsimport生成错误代码,java,wsimport,Java,Wsimport,我使用wsimport生成java存根文件。为此,我在Eclipse中使用了一个ant构建文件: <taskdef name="wsimport" classname="com.sun.tools.ws.ant.WsImport"> <classpath> <fileset dir="../lib"> <include name="jaxws-tools.jar" /> </fi

我使用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>

对于它们,我得到一个错误“构造函数服务(…)未定义”。我导入了当前的jax-ws-jar文件。我的生成过程是否中断,我是否使用了错误的JAR,或者错误在哪里?

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

如果我们使用Java 1.6.0_27和Metro 2.2,我们需要认可webservices-api.jar

  • 我们必须将这个jar放入文件夹
    java install dir
    \jre\lib\endorned\
  • 在使用Eclipse的情况下,我们必须确保使用目录
    java install dir
    中的正确JRE。这是在窗口->首选项->Java->安装的JRE->添加中完成的
  • 现在错误“构造函数服务(…)未定义”应该消失了。

    您可以设置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>
    
    
    
    我担心这个版本会有冲突:-(在我的项目设置中,我已将Java Compiler>Compiler Compliance Level设置为1.6。还有什么地方会出现不匹配?在Eclipse中也是如此?您似乎也在使用Ant。为了使用wsimport,您需要使用taskdef来定义它。您可以发布taskdef吗?您在类路径中使用了什么?要使JDK使用不同的版本,请如果需要将新的api JAR添加到JDK本身,您可以将JAR添加到认可的目录中,即/jre/lib/annowed。我在该目录中有jaxb api和jaxws api。
    <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>