由于您使用的是 Axis2,因此使用它生成客户端代理(wsdl2java 是您最好的朋友),并将为您的 Web 服务创建一个标准的 java 代理。无需手动创建 SOAP 信封……(至少在 99% 的情况下)。
只需生成一个 WSDL(编写它或使用 java2wsdl 生成它),然后使用它来生成一个 java 代理来调用您的 Web 服务。
关于如何使用代理...
恕我直言,来自 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 客户端文档。