Java 在没有eclipse的情况下通过ant生成Web服务

Java 在没有eclipse的情况下通过ant生成Web服务,java,eclipse,web-services,ant,wsdl,Java,Eclipse,Web Services,Ant,Wsdl,我正在尝试使用ant从现有代码到war文件生成Web服务。Eclipse生成一个完整的ant构建文件(axis_bujava.xml),该文件可以工作(但undeploy.wsdd不是一直生成的,我不知道为什么),但前提是我从Eclipse运行它 我希望有一个独立的脚本来生成我的Web服务(并且在将其打包到warfile之后,但这不是问题^^) 我将eclipse插件文件夹中的一些JAR添加到类路径中,并创建了任务“wsgen”,但我没有得到“空指针异常” My axis_bujava.xml:

我正在尝试使用ant从现有代码到war文件生成Web服务。Eclipse生成一个完整的ant构建文件(axis_bujava.xml),该文件可以工作(但undeploy.wsdd不是一直生成的,我不知道为什么),但前提是我从Eclipse运行它

我希望有一个独立的脚本来生成我的Web服务(并且在将其打包到warfile之后,但这不是问题^^)

我将eclipse插件文件夹中的一些JAR添加到类路径中,并创建了任务“wsgen”,但我没有得到“空指针异常”

My axis_bujava.xml:

<?xml version="1.0"?>

<project default="main" basedir=".">

<echo message="pulling in property files"/>
<property file="axis_bujava.properties"/>



<path id="wsgenlib">
      <fileset dir="${ant.library.dir}/org.eclipse.wst.command.env/" includes="ant-lib/anttasks.jar"/>
</path>

<taskdef name="wsgen"
         classname="ws.ant.task.WebServiceGenerationAntTask"
         classpath="${ant.library.dir}/org.eclipse.wst.command.env"
         />

<echo message="calling the web services generation ant task: axis_bujava"/>
 <target name="main" >

     <wsgen />
  </target>

</project>

错误:

D:\Dev\S\u Demo\ant\axis\u bujava.xml:22:java.lang.NullPointerException 位于org.eclipse.wst.command.internal.env.context.PersistentContext.(PersistentContext.java:31) 位于org.eclipse.wst.command.internal.env.context.PersistentResourceContext.(PersistentResourceContext.java:36) 位于org.eclipse.wst.command.internal.env.context.PersistentResourceContext.getInstance(PersistentResourceContext.java:27) 位于org.eclipse.wst.command.internal.env.ant.AntController.(AntController.java:56) 在ws.ant.task.webservicenegenerationanttask.execute(webservicenegenerationanttask.java:31) 位于org.apache.tools.ant.UnknowneElement.execute(unknowneElement.java:292) 在sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法)处 位于sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 在sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)中 位于java.lang.reflect.Method.invoke(Method.java:483) 位于org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:106) 位于org.apache.tools.ant.Task.perform(Task.java:348) 位于org.apache.tools.ant.Target.execute(Target.java:435) 位于org.apache.tools.ant.Target.performTasks(Target.java:456) 位于org.apache.tools.ant.Project.executeSortedTargets(Project.java:1393) 位于org.apache.tools.ant.Project.executeTarget(Project.java:1364) 位于org.apache.tools.ant.helper.DefaultExecutor.executeTargets(DefaultExecutor.java:41) 位于org.apache.tools.ant.Project.executeTargets(Project.java:1248) 位于org.apache.tools.ant.Main.runBuild(Main.java:851) 位于org.apache.tools.ant.Main.startAnt(Main.java:235) 位于org.apache.tools.ant.launch.Launcher.run(Launcher.java:280) 位于org.apache.tools.ant.launch.Launcher.main(Launcher.java:109)

总时间:0秒


正如我在评论中所说,我通过直接使用Axis类解决了这个问题(正如eclipse所做的那样):

重要注意事项:使用的Ant版本:

ApacheAnt(TM)版本1.9.2于2013年7月8日编译

第一,依赖项(最小列表,在执行时将它们添加到ant类路径):

  • axis.jar
  • axis-ant.jar
第二,Ant build.xml:

从axis-ant.jar获取任务

<taskdef 
        resource="axis-tasks.properties"
/>

在目标中:

  • 生成wsdl文件
  • 注意:如果不起作用,请使用org.apache.axis.wsdl.Java2WSDL,类似于下一点,两者都有一个“-h”选项提供帮助

    
    
  • 生成deploy/undeploy.wsdd文件
  • 直接使用“java”,因为在我的例子中,axis ant的ant任务不起作用。和exec任务,我对java任务有一些问题(ant版本的原因)

    
    
  • 生成server-config.wsdd

    <exec executable="java">
        <arg value="-cp" />
        <arg value="${path.dependencies}/*" />
        <arg value="org.apache.axis.utils.Admin" />
        <arg value="server"/>
        <arg value="WebContent/WEB-INF/MyServiceImplService/com.acme.org/deploy.wsdd"/>
    </exec>
    <move file="server-config.wsdd" tofile="WebContent/WEB-INF/server-config.wsdd"/>
    
    
    
  • 清理生成的jar文件

    <delete>
        <fileset dir="WebContent/WEB-INF/MyServiceImplService/com.acme.org/" includes="*.java" />
    </delete>
    
    
    

  • 安装旧版本!更新的版本有很多错误,即使是干净的安装,大多数时候都无法从新菜单创建Web服务!忘了自动化吧!是的,有很多错误。。。我通过直接使用axis生成器(如:org.apache.axis.wsdl.Java2WSDL)通过ant任务“exec”来启动java(不使用“java”任务…)修复了这个问题。谢谢回复!很好,我建议回答你的问题,祝你好运:)干得好,我们试过玻璃鱼,效果也不错!现在,如果有人知道如何用CXF而不是Axis做同样的事情。。。(在兼容性方面,我不想修改客户端应用程序)
    <exec executable="java">
        <arg value="-cp" />
        <arg value="${path.dependencies}/*" />
        <arg value="org.apache.axis.utils.Admin" />
        <arg value="server"/>
        <arg value="WebContent/WEB-INF/MyServiceImplService/com.acme.org/deploy.wsdd"/>
    </exec>
    <move file="server-config.wsdd" tofile="WebContent/WEB-INF/server-config.wsdd"/>
    
    <delete>
        <fileset dir="WebContent/WEB-INF/MyServiceImplService/com.acme.org/" includes="*.java" />
    </delete>