`

TOMCAT中的SOAP简单应用

    博客分类:
  • J2EE
阅读更多

SOAP的主页:http://ws.apache.org/soap/

SOAP RPC 的工作原理非常类似于WEB的请求/响应方式,两者都以HTTP作为通信协议,不同之处在于WEB客户和WEB服务器之间传输的是HTML数据,而在SOAP RPC模式中,SOAP客户和服务之间传输的是符合SOAP规范的XML数据。本文通过一个简单的SOAP应用来说明SOAP RPC的工作方式。

在Eclipse里面创建SOAP工程,把从SOAP主页上下载到的SOAP分发版本中的webapps/soap/目录中的文件拷贝过来,再把mail.jar/activation.jar/soap.jar拷贝到WEB-INF/lib/目录下。(mail.jar和activation.jar请在SUN网站上找,soap.jar在SOAP分发版本的lib目录中)

目录结构如下:

 

soap/
|--src/
| |--org.eleaf.soap/
| |--HelloClient.java
| |--HelloService.java
|--WebRoot/
|--admin/
|--META-INF/
|--WEB-INF/
|--DeploymentDescriptor.xml
|--web.xml
|--lib/
|--soap.jar
|--mail.jar
|--activation.jar

在TOMCAT的conf/server.xml文件中添加一个名为soap的Context标记:

 

<Context path="/soap" docBase="D:\work\eclipse\soap\WebRoot" workDir="D:\work\eclipse\soap\j2src" reloadable="true" debug="0"/>

</Host>

……

然后启动TOMCAT,访问http://jim:4001/soap/ ,可以看到SOAP的控制页面:

 

<!--StartFragment -->

Apache-SOAP

Hello! Welcome to Apache-SOAP.

What do you want to do today?

  • Run the admin client
  • Visit the SOAP RPC router URL for this SOAP server

Apache-SOAP

Hello! Welcome to Apache-SOAP.

What do you want to do today?

  • Run the admin client
  • Visit the SOAP RPC router URL for this SOAP server

SOAP服务器端程序:包含三个可供客户端调用的方法。

package org.eleaf.soap;

import java.util.Date;

public class HelloService {
public String sayHello(String username)
{
return "Hello:" + username;
}
public Date getDate()
{
return new Date();
}
public int sum(int i, int j)
{
return i+j;
}
}

SOAP服务配置文件:DeploymentDescriptor.xml:

 

<isd:service xmlns:isd="http://xml.apache.org/xml-soap/deployment "
id="urn:helloservice">
<isd:provider type="java"
scope="Application"
methods="sayHello getDate sum">
<isd:java class="org.eleaf.soap.HelloService"/>
</isd:provider>
</isd:service>

把soap.jar/mail.jar/activation.jar加入CLASSPATH:

 


D:\work\eclipse\soap\WebRoot\WEB-INF>set classpath=%classpath%;D:\jakarta-tomcat
-5.0.28\shared\lib\activation.jar;D:\jakarta-tomcat-5.0.28\shared\lib\mail.jar;D
:\work\eclipse\soap\WebRoot\WEB-INF\lib\soap.jar

D:\work\eclipse\soap\WebRoot\WEB-INF>

发布SOAP服务:

 

D:\work\eclipse\soap\WebRoot\WEB-INF>java org.apache.soap.server.ServiceManagerC
lient
http://jim:4001/soap/servlet/rpcrouter deploy DeploymentDescriptor.xml

D:\work\eclipse\soap\WebRoot\WEB-INF>

查看已发布的SOAP服务:

 

 

D:\work\eclipse\soap\WebRoot\WEB-INF>java org.apache.soap.server.ServiceManagerC
lient
http://jim:4001/soap/servlet/rpcrouter list
Deployed Services:
urn:helloservice

D:\work\eclipse\soap\WebRoot\WEB-INF>

编写客户端调用程序:该类将通过SOAP发出RPC请求,来调用服务器端的三个方法。

 

package org.eleaf.soap;

import java.net.URL;
import java.util.Vector;

import org.apache.soap.Constants;
import org.apache.soap.Fault;
import org.apache.soap.rpc.Call;
import org.apache.soap.rpc.Parameter;
import org.apache.soap.rpc.Response;

public class HelloClient {

/**
* @param args
*/
public static void main(String[] args) throws Exception{
URL url = new URL("http://jim:4001/soap/servlet/rpcrouter ");

Call call = new Call();
call.setTargetObjectURI("urn:helloservice");
call.setMethodName("sayHello");
call.setEncodingStyleURI(Constants.NS_URI_SOAP_ENC);
Vector params = new Vector();
params.addElement(new Parameter("username", String.class , "bitan", null ));
call.setParams(params);
Response resp = call.invoke(url, "");
if (resp.generatedFault())
{
Fault fault = resp.getFault();
System.out.println("[code:" + fault.getFaultCode() +
"];[description:" + fault.getFaultString() + "]");
}
else
{
Parameter result = resp.getReturnValue();
System.out.println("[value:" + result.getValue() + "];[name:" +
result.getName() + "];[class:" + result.getClass() +
"];[type:" + result.getType() + "];[encoding:" +
result.getEncodingStyleURI() + "]");
}

call.setMethodName("getDate");
call.setEncodingStyleURI(Constants.NS_URI_SOAP_ENC);
call.setParams(null );
resp = call.invoke(url, "");
if (resp.generatedFault())
{
Fault fault = resp.getFault();
System.out.println("[code:" + fault.getFaultCode() +
"];[description:" + fault.getFaultString() + "]");
}
else
{
Parameter result = resp.getReturnValue();
System.out.println("[value:" + result.getValue() + "];[name:" +
result.getName() + "];[class:" + result.getClass() +
"];[type:" + result.getType() + "];[encoding:" +
result.getEncodingStyleURI() + "]");
}

call.setMethodName("sum");
call.setEncodingStyleURI(Constants.NS_URI_SOAP_ENC);
params = new Vector();
params.addElement(new Parameter("i", int .class , new Integer(24), null ));
params.addElement(new Parameter("j", int .class , new Integer(37), null ));
call.setParams(params);
resp = call.invoke(url, "");
if (resp.generatedFault())
{
Fault fault = resp.getFault();
System.out.println("[code:" + fault.getFaultCode() +
"];[description:" + fault.getFaultString() + "]");
}
else
{
Parameter result = resp.getReturnValue();
System.out.println("[value:" + result.getValue() + "];[name:" +
result.getName() + "];[class:" + result.getClass() +
"];[type:" + result.getType() + "];[encoding:" +
result.getEncodingStyleURI() + "]");
}
}

}

执行结果:

 

D:\work\eclipse\soap\WebRoot\WEB-INF\classes>java org.eleaf.soap.HelloClient
[value:Hello:bitan ];[name:return];[class:class org.apache.soap.rpc.Parameter];[t
ype:class java.lang.String];[encoding:null]
[value:Wed Oct 19 14:32:29 CST 2005 ];[name:return];[class:class org.apache.soap.
rpc.Parameter];[type:class java.util.Date ];[encoding:null]
[value:61 ];[name:return];[class:class org.apache.soap.rpc.Parameter];[type:int ];
[encoding:null]

D:\work\eclipse\soap\WebRoot\WEB-INF\classes>

删除已发布的SOAP服务:

 

D:\work\eclipse\soap\WebRoot\WEB-INF>java org.apache.soap.server.ServiceManagerC
lient http://jim:4001/soap/servlet/rpcrouter undeploy urn:helloservice

D:\work\eclipse\soap\WebRoot\WEB-INF>java org.apache.soap.server.ServiceManagerC
lient
http://jim:4001/soap/servlet/rpcrouter list
Deployed Services:

D:\work\eclipse\soap\WebRoot\WEB-INF>

再次调用客户程序,由于服务已被删除,客户端再次调用时返回错误代码:

 

D:\work\eclipse\soap\WebRoot\WEB-INF>cd classes

D:\work\eclipse\soap\WebRoot\WEB-INF\classes>java org.eleaf.soap.HelloClient
[code:SOAP-ENV:Server ];[description:service 'urn:helloservice' unknown ]
[code:SOAP-ENV:Server];[description:service 'urn:helloservice' unknown]
[code:SOAP-ENV:Server];[description:service 'urn:helloservice' unknown]

D:\work\eclipse\soap\WebRoot\WEB-INF\classes>

分享到:
评论

相关推荐

    FAQ_Tomcat_SOAP_SSL.pdf

    本文档详细介绍了如何在Apache Tomcat服务器上配置安全套接层(Secure Sockets Layer,简称SSL)通信,并为一个简单的Apache SOAP客户端设置SSL连接。通过本教程,即使是Java安全领域的初学者也能顺利实现SSL连接的...

    soap+tomcat的环境配置

    在本场景中,我们将讨论如何配置一个SOAP服务环境,结合Tomcat应用服务器。 首先,确保已安装了Java Development Kit (JDK)。JDK是运行和开发Java应用程序的基础,包括Java编译器和Java运行时环境。你可以从Oracle...

    soap接口的描述与简单应用

    总的来说,SOAP是一种强大的技术,允许跨平台、跨语言的通信,广泛应用于企业级的分布式系统中。然而,随着RESTful API的流行,SOAP在某些场景下可能会显得相对复杂。但对于需要强类型化、事务处理和安全性控制的...

    spring、hessian通过tomcat的简单环境应用源代码

    【标题】"spring、hessian通过tomcat的简单环境应用源代码"涉及到的是在Java Web开发中使用Spring框架和Hessian服务序列化技术在Tomcat服务器上的集成与应用。Spring是一个广泛使用的开源Java应用程序框架,它提供了...

    webservice简单例子,Tomcat

    在这个例子中,Tomcat将作为Web服务的服务器,承载服务端的Web服务应用程序。 创建Web服务的步骤大致如下: 1. **设置环境**: 首先,你需要在本地机器上安装Java Development Kit (JDK) 和Apache Tomcat。接着,...

    soap+axis+tomcat

    搭建基于SOAP的Web服务,你需要将Apache Axis集成到Tomcat服务器中。首先,你需要从Apache Axis的官方网站下载并解压缩最新的版本(在描述中提到的是1.4)。然后,将Axis解压后的`webapps/axis`目录复制到你的Tomcat...

    Soap—WebServer解析简单例子

    SOAP(Simple Object Access...通过这个例子,我们可以了解到SOAP协议如何在Web服务和客户端之间传递数据,以及如何在Android应用中调用这些服务。学习并理解SOAP通信机制对于开发分布式系统和跨平台应用程序至关重要。

    webservice部署tomcat简单例子(客户端和服务端)

    在本示例中,我们将探讨如何使用JAX-WS(Java API for XML Web Services)在Tomcat服务器上部署一个简单的Web服务。Tomcat是一款轻量级的Java Servlet容器,广泛用于开发和部署Java Web应用。 首先,了解JAX-WS至关...

    SOAP WebService简单例子

    在本例中,我们将探讨如何使用Eclipse IDE和Apache Axis2框架创建和测试一个简单的SOAP WebService。 1. **Eclipse IDE**:Eclipse是Java开发者广泛使用的集成开发环境,提供了丰富的插件支持,包括用于Web服务开发...

    tomcat依赖jar包

    在Tomcat环境中,JAX-RPC可以帮助开发者创建和使用Web服务,使得远程调用服务端方法变得简单。 3. **wsdl4j.jar**:WSDL4J(Web Services Description Language for Java)是实现WSDL(Web Services Description ...

    基于Servlet发送、接收SOAP消息的java源程序

    在Web服务开发中,SOAP(简单对象访问协议)是一种常见的消息传输协议,用于在不同系统间交换结构化和类型化的信息。Servlet作为Java Web应用程序的核心组件,常被用来处理HTTP请求和响应。本教程将深入探讨如何使用...

    Tomcat源码所需要jar包

    虽然JAX-RPC在现代Web服务开发中已经被JAX-WS取代,但在早期版本的Tomcat中,可能用到了JAX-RPC来处理SOAP(简单对象访问协议)通信。了解这个库对于理解Tomcat如何与Web服务交互是必要的。 3. **org.eclipse.jdt....

    tomcat6 免安装 解压版

    3. **纯净版特性**:纯净版Tomcat6移除了默认的webapps目录中的示例应用,这些应用虽然有助于学习,但在生产环境中可能会带来安全风险或性能开销。清空这些项目后,服务器启动更迅速,内存占用更小。 4. **部署与...

    SOAP Axis 三种发布调用方式简单实例

    这种方式灵活且便于集成到现有应用中。 3. **使用Axis管理员工具(Axis Admin Console)** Axis自带了一个简单的Web管理界面,可以通过浏览器访问。在Web服务器上运行Axis后,可以输入管理页面的URL,如`...

    Tomcat与Java_Web开发技术详解3.pdf

    Tomcat因其简单易用、轻量级的特点而被广泛应用于中小型项目中。 #### 二、Tomcat 5版本特性 Tomcat 5是Tomcat发展历史上的一个重要版本,相对于之前的版本,Tomcat 5进行了大量的改进和优化,支持更多的标准和...

    tomcat5.0.28下安装axis所需的4个包

    在实际应用中,可能还需要根据具体需求配置其他如数据库连接池、加密库等依赖。同时,由于Tomcat 5.0.28是一个较旧的版本,可能不再受到官方维护,因此在生产环境中使用时要考虑其兼容性和安全性问题,可能需要升级...

    Soap webService 需要的 资源包 jar文件

    在Java应用中,JAX-WS相关的jar文件如`jaxws-api.jar`、`javax.xml.ws-api.jar`等是必要的。 4. **JAXB(Java Architecture for XML Binding)**:JAXB是Java标准,用于将XML文档和Java对象之间进行互相转换。在...

    使用axis1.3构建自己的SOAP应用程序源码

    通过以上步骤,你就可以使用Apache Axis1.3成功地构建并部署一个简单的SOAP应用程序。在实际开发中,你可能需要处理更复杂的业务逻辑、数据交换格式,以及错误处理等问题。了解和掌握这些基本步骤是进一步学习和应用...

    SOAP接口开发chm

    开发者可以通过CXF的Spring集成来轻松地在应用中添加Web服务。 4. **SOAP接口开发过程**: - **定义服务接口**:首先,你需要定义一个服务接口,通常是一个Java接口或抽象类,定义了服务提供的操作。 - **创建...

    cxf+spring+tomcat

    2. **Spring框架**:Spring是Java开发中的核心框架,尤其在企业级应用中。它提供依赖注入(DI)和面向切面编程(AOP)等功能,简化了应用的开发和管理。在与CXF结合时,Spring可以帮助管理Web服务的生命周期,并且...

Global site tag (gtag.js) - Google Analytics