2012-06-27 64 views
0

我已经创建并注册了一个Web服务。现在我想制作一个简单的Web应用程序来访问Web服务。我使用axis2作为Web服务服务器。客户端以xml格式文件(data.xml)的形式提供要由Web服务处理的数据。我的jsp表单有一个文本框(提供data.xml的位置)和一个“调用”按钮,可以访问调用web服务。我假设jsp将首先将请求发送给servlet,然后servlet将成为负责调用Web服务的人员。 Web服务托管在PC1中,包含访问Web服务的JSP的Web应用程序位于PC2中,data.xml位于PC3中。因此,用户将从PC3开始工作,在PC3中打开Web浏览器访问PC2中的jsp,然后调用PC1中的Web服务。访问网络服务

  1. 什么是从servlet调用Web服务的语法?我想知道axis2是否可以在客户端使用。
  2. 我该如何构建SOAP请求(我假设SOAP请求是在servlet中构建的)?希望我不需要按字符串构造SOAP请求字符串。
  3. 关于data.xml,我假设jsp会把文件上传到servlet,所以servlet会收到一个文件作为参数。这是正确的方法吗? 谢谢

回答

0

除非你想手工做,你应该使用web服务堆栈。 Apache CXF和Metro都是不错的选择。

这就是说,我不知道你想用你的data.xml做什么。

  1. 取决于框架
  2. 你不知道。这就是框架的用途。
  3. 如果您想要多部分支持,您应该查看现成的servlet。或者更好的是,使用Spring框架:)
1

由于您使用的Axis2,它生成客户端代理(WSDL2Java的是你最好的朋友),并为您的Web服务标准的Java代理。无需手动创建SOAP信封...(至少在99%的情况下)。

只需生成一个WSDL(使用java2wsdl编写或生成它),然后使用它来生成调用Web服务的java代理。

关于如何使用代理...从JSP

恕我直言,直接调用是一个没有没有。最好让JSP收集数据并将它们发布到servlet,然后在servlet中执行WebService调用,管理响应(如果您使用Axis2框架,它将是一个纯java对象),处理错误并转发给另一个JSP,以提供结果。

JSP有些容易写,但是从长远来看,更好地利用他们,他们的计划是什么,并保持servlet的

这里做WSDL和客户端生成2个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客户端文档的一些内容是强制性的。

+0

是的,所以基本上jsp会将文件上传到位于PC2的servlet。你能给我一些语法来构造来自servlet的SOAP消息并调用servlet中的Web服务吗?谢谢 –

+0

这有点难,我可以添加一个蚂蚁任务的例子。 – BigMike

+0

非常感谢 –