我创建并注册了一项Web服务。现在我想创建一个简单的Web应用程序来访问Web服务。我使用axis2作为Web服务服务器。向客户端提供要由Web服务以xml格式文件(data.xml)的形式处理的数据。我的jsp表单有一个文本框(用于提供data.xml的位置)和一个" invoke"将访问的按钮调用Web服务。我假设jsp将首先将请求发送到servlet,然后servlet将负责调用Web服务。 Web服务托管在PC1中,包含访问Web服务的JSP的Web应用程序在PC2中,而data.xml在PC3中。因此,用户将使用PC3,在PC3中打开Web浏览器访问PC2中的jsp,然后在PC1中调用Web服务。
答案 0 :(得分:1)
由于您正在使用Axis2,因此使用它生成客户端代理(wsdl2java是您最好的朋友)并将为您的Web服务创建标准Java代理。没有必要手动创建SOAP信封......(至少在99%的情况下)。
只需生成一个WSDL(编写它或用java2wsdl生成它)然后用它来生成一个用于调用Web服务的java代理。
关于如何使用代理...
来自jsp的恕我直言是一个禁忌。最好让JSP收集数据并将它们发送到servlet,然后在servlet中执行WebService调用,管理响应(如果你使用Axis2框架将是一个纯java对象),处理错误然后转发到另一个JSP给出结果。
JSP有点容易编写,但从长远来看,最好将它们用于计划内容并将业务逻辑保存在servlet中
这里有两个用于执行WSDL和客户端生成的ant任务。
<!-- create the wsdl file -->
<target name="genwsdl">
<echo message="Generate the WSDL file"/>
<taskdef name="java2wsdl" classname="org.apache.ws.java2wsdl.Java2WSDLTask" classpathref="axis2.classpath"/>
<java2wsdl className="org.stackoverflow.YourWebServiceClassName"
servicename="YourServiceName"
description="Whatever..."
outputLocation="./wsdl"
locationuri="http://localhost:8081/NameMe/CoolService">
<classpath>
<pathelement path="${axis2.classpath}"/>
<pathelement location="./build/classes"/>
</classpath>
</java2wsdl>
<echo message="Generation of the WSDL file complete"/>
</target>
<target name="genclient" depends="genwsdl">
<taskdef name="axis2-wsdl2java" classname="org.apache.axis2.tool.ant.AntCodegenTask" classpathref="axis2.classpath"/>
<axis2-wsdl2java wsdlfilename="./wsdl/YourWsdl.wsdl" output="./client overwrite="true"/>
</target>
生成客户端类(代理)后,可以使用它们来调用Web服务。
这将是:
YourServiceStub stub = new YourServiceStub(wsEndPointUrl);
然后在存根中,您将为每个远程发布的方法和包装的请求/响应对象的静态类提供方法。但是在这一点上,必须阅读一下Axis2客户端文档。
答案 1 :(得分:0)
除非您想手动执行,否则应使用Web服务堆栈。 Apache CXF和Metro是很好的候选者。
那就是说,我不知道你想用你的data.xml做什么。