Java 在没有eclipse的情况下通过ant生成Web服务
我正在尝试使用ant从现有代码到war文件生成Web服务。Eclipse生成一个完整的ant构建文件(axis_bujava.xml),该文件可以工作(但undeploy.wsdd不是一直生成的,我不知道为什么),但前提是我从Eclipse运行它 我希望有一个独立的脚本来生成我的Web服务(并且在将其打包到warfile之后,但这不是问题^^) 我将eclipse插件文件夹中的一些JAR添加到类路径中,并创建了任务“wsgen”,但我没有得到“空指针异常” My axis_bujava.xml: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:
<?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
<taskdef
resource="axis-tasks.properties"
/>
在目标中:
<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>
安装旧版本!更新的版本有很多错误,即使是干净的安装,大多数时候都无法从新菜单创建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>