`
lws0402
  • 浏览: 106812 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

java soap + tomcat 开发

    博客分类:
  • java
阅读更多
不带javaBean的SOAP调用

首先,下载soap.war,javamail.jar,activation.jar,soap.jar,xerces.jar,然后就是配置环境,如何配置就不细说了。

把soap.war扔到tomcat的webapps下,启动tomcat,访问http://127.0.0.1:8080/soap,出现Hello! Welcome to Apache-SOAP. 就说明环境搭建好了。

首先建立个java项目,包名叫soap,类名叫SOAPService,这个就是要远程调用的类

SOAPService.java:
# package soap;  
#   
# public class SOAPService  
# {  
#     public Person sayHi(String name)  
#     {  
#         return "Hello! " + name;  
#     }  
# }


然后打开soap的管理页面,http://127.0.0.1:8080/soap/admin

在管理页面点击“Deploy”按钮,配置部署这个类,填写基本信息如下:

ID                                        urn:HelloWorld_SOAPService
Scope                                  Application
Provider Type                      java
Provider Class                     soap.SOAPService
Use Static Class                  no
Methods                              sayHi

配置好后,编写soap的调用类SOAPClient

SOAPClient.java
# package com.kt.test;  
#   
# import java.net.MalformedURLException;  
# import java.net.URL;  
# import java.util.Vector;  
#   
# import org.apache.soap.Constants;  
# import org.apache.soap.Fault;  
# import org.apache.soap.SOAPException;  
# import org.apache.soap.rpc.Call;  
# import org.apache.soap.rpc.Parameter;  
# import org.apache.soap.rpc.Response;  
#   
# public class SOAPClient  
# {  
#     public static void main(String[] args) throws MalformedURLException, SOAPException  
#     {  
#         Call c = null;  
#         URL url = null;  
#         Vector params = null;  
#         Response rep = null;  
#   
#         //传入的参数名  
#         String ourName = "lws";  
#   
#         //部署soap时的唯一标示  
#         String ourUrn = "urn:HelloWorld_SOAPService";  
#   
#         //远程调用的方法  
#         String ourMethod = "sayHi";  
#   
#         //soap的url  
#         url = new URL("http://localhost:8080/soap/servlet/rpcrouter");  
#   
#         System.out.println("Passing to our deployed " + ourUrn + " our name ("  
#                 + ourName + "): ");  
#   
#         c = new Call();  
#         c.setTargetObjectURI(ourUrn);  
#         c.setMethodName(ourMethod);  
#         c.setEncodingStyleURI(Constants.NS_URI_SOAP_ENC);  
#   
#         //设置参数  
#         params = new Vector();  
#         params.addElement(new Parameter("name", String.class, ourName, null));  
#   
#         c.setParams(params);  
#   
#         System.out.print("and its answer is: ");  
#   
#         //Call的invoke返回org.apache.soap.rpc.Response  
#         rep = c.invoke(url, "");  
#   
#         //rep.generatedFault()判断请求是否成功,不成功打印错误代码,请求成功就打印远程调用返回的值  
#         if (rep.generatedFault())  
#         {  
#             Fault fault = rep.getFault();  
#             System.out.println("\nCall failed!");  
#             System.out.println("Code = " + fault.getFaultCode());  
#             System.out.println("String = " + fault.getFaultString());  
#         } else  
#         {  
#             Parameter result = rep.getReturnValue();  
#             System.out.print(result.getValue() + " === ");  
#             System.out.println();  
#         }  
#     }  
# }


此时把SOAPService.class拷贝到tomcat主目录的webapps下的soap/WEB-INF/classes下,注意包名,重启tomcat,运行SOAPClient.java文件,就应该可以看到打印出的远程返回的字符串“Hello! lws”。

带javaBean的SOAP调用

其本上大致相同,只是在远程调用类里要手动出则一下javaBean,部署soap的时候也需要添加用户自己的javaBean

SOAPService.java
   1. package soap;  
   2.   
   3. public class SOAPService  
   4. {  
   5.     public Person sayHi(Person person)  
   6.     {  
   7.         person.setName("name_1");  
   8.         return person;  
   9.     }  
  10. }  


在编写Person类,在相同的包(soap)下
# package soap;  
#   
# public class Person  
# {  
#     private String name;  
#   
#     public String getName()  
#     {  
#         return name;  
#     }  
#   
#     public void setName(String name)  
#     {  
#         this.name = name;  
#     }  
# }


打开http://127.0.0.1:8080/soap/admin配置该soap类,信息如下:

ID                                        urn:HelloWorld_SOAPService
Scope                                  Application
Provider Type                      java
Provider Class                     soap.SOAPService
Use Static Class                  no
Methods                              sayHi

这是还需要配置javaBean,在Number of Mappings输入框输入1,它表示我们将给出一个映射(即Name JavaBean)的信息。紧接Mappings之下有一个表格,我们要用到这个表格的第一行。保留Encoding Style的值为SOAP,把NameSpace URI设置成对象的ID:在本例中,它是urn:Person。接下来,把Local Part和Java Type输入框设置成Name JavaBean的完整名字,即soap.Person。最后,把Java to XML Serializer和XML to Java Deserializer输入框设置成org.apache.soap.encoding.soapenc.BeanSerializer,这是一个实现了Serializer和Deserializer接口的类,用来串行化和反串行化Name JavaBean。如果你用到了更多的JavaBean(比如还有一个Address Bean),则应该在这个表格中输入其他Bean的信息,同时还应该更新Number of Mappings输入框的值,使之反映出表格中实际被使用的行数。

在SOAP调用程序中需要手工注册javaBean,完整代码如下;

SOAPClient.java
# package soap;  
#   
# import java.net.URL;  
# import java.util.Vector;  
#   
# import org.apache.soap.Constants;  
# import org.apache.soap.Fault;  
# import org.apache.soap.encoding.SOAPMappingRegistry;  
# import org.apache.soap.encoding.soapenc.BeanSerializer;  
# import org.apache.soap.rpc.Call;  
# import org.apache.soap.rpc.Parameter;  
# import org.apache.soap.rpc.Response;  
# import org.apache.soap.util.xml.QName;  
#   
# public class SOAPClient  
# {  
#     public static void main(String[] arg) throws Exception  
#     {  
#         Call c = null;  
#         URL url = null;  
#         Vector params = null;  
#         Response rep = null;  
#         String ourName = "lws";  
#         String ourUrn = "urn:HelloWorld_SOAPService";  
#         String ourMethod = "sayHi";  
#         url = new URL("http://localhost:8080/soap/servlet/rpcrouter");  
#   
#         System.out.println("Passing to our deployed " + ourUrn + " our name ("  
#                 + ourName + "): ");  
#   
#         c = new Call();  
#         c.setTargetObjectURI(ourUrn);  
#         c.setMethodName(ourMethod);  
#         c.setEncodingStyleURI(Constants.NS_URI_SOAP_ENC);  
#           
#         // 创建类型映射注册器  
#         SOAPMappingRegistry smr = new SOAPMappingRegistry();  
#         BeanSerializer beanSer = new BeanSerializer();  
#         // 映射类型  
#         smr.mapTypes(Constants.NS_URI_SOAP_ENC,  
#         new QName("urn:Person", "soap.Person"),soap.Person.class, beanSer, beanSer);  
#   
#         c.setSOAPMappingRegistry(smr);  
#   
#         params = new Vector();  
#         params.addElement(new Parameter("x", Person.class, new Person(),  
#                         null));  
#         c.setParams(params);  
#   
#         System.out.print("and its answer is: ");  
#           
#         rep = c.invoke(url, "");  
#         if (rep.generatedFault())  
#         {  
#             Fault fault = rep.getFault();  
#             System.out.println("\nCall failed!");  
#             System.out.println("Code = " + fault.getFaultCode());  
#             System.out.println("String = " + fault.getFaultString());  
#         } else  
#         {  
#             Parameter result = rep.getReturnValue();  
#             Person entity = (Person)result.getValue();  
#             System.out.print( entity.getName()+ " === ");  
#         }  
#     }  
# }


运行该程序,会打印出person对象中name的值"name_1"

提醒:如果要运行在MyEcplise建立的web项目上,会出错。

         因为用 MyEcplise创建web项目,会自动加入javaee.jar,这里面已经封装了javamail和activation,所以造成了冲突,只要用解压工具打开javaee.jar文件,把里面的mail和activation删了就可以正常的访问了。
分享到:
评论

相关推荐

    孙卫琴《Tomcat与Java Web开发技术详解》培训讲义.rar

    孙卫琴《Tomcat与Java Web开发技术详解》培训讲义.rar 01__JavaWeb应用简介.pdf 02_Servlet技术.pdf 03_JSP...自定义客户化标签.pdf 08_开发Java Mail Web.pdf 09_Soap服务.pdf tomcat_chapter2.pdf

    JAVA上百实例源码以及开源项目

     Tcp服务端与客户端的JAVA实例源代码,一个简单的Java TCP服务器端程序,别外还有一个客户端的程序,两者互相配合可以开发出超多的网络程序,这是最基础的部分。 递归遍历矩阵 1个目标文件,简单! 多人聊天室 3...

    Java Web Service 程序例子

    Java Web Service 学习例子,里面有大量用来开发web services的Java程序示例,非常值得学习。 使用到的技术及工具如下: Apache: www.apache.org and xml.apache.org -- Ant 1.4.1 -- SOAP 2.2 -- Tomcat 3.2...

    JAVA上百实例源码以及开源项目源代码

     Tcp服务端与客户端的JAVA实例源代码,一个简单的Java TCP服务器端程序,别外还有一个客户端的程序,两者互相配合可以开发出超多的网络程序,这是最基础的部分。 递归遍历矩阵 1个目标文件,简单! 多人聊天室 3...

    java开源包4

    最大限度地减少时间和费用开发自定义的DSL(领域特定语言在Java)要求。 日志服务器 Apache Flume.tar Flume 是一个分布式、可靠和高可用的服务,用于收集、聚合以及移动大量日志数据,使用一个简单灵活的架构,就...

    java开源包101

    最大限度地减少时间和费用开发自定义的DSL(领域特定语言在Java)要求。 日志服务器 Apache Flume.tar Flume 是一个分布式、可靠和高可用的服务,用于收集、聚合以及移动大量日志数据,使用一个简单灵活的架构,就...

    java开源包11

    最大限度地减少时间和费用开发自定义的DSL(领域特定语言在Java)要求。 日志服务器 Apache Flume.tar Flume 是一个分布式、可靠和高可用的服务,用于收集、聚合以及移动大量日志数据,使用一个简单灵活的架构,就...

    java开源包6

    最大限度地减少时间和费用开发自定义的DSL(领域特定语言在Java)要求。 日志服务器 Apache Flume.tar Flume 是一个分布式、可靠和高可用的服务,用于收集、聚合以及移动大量日志数据,使用一个简单灵活的架构,就...

    java开源包9

    最大限度地减少时间和费用开发自定义的DSL(领域特定语言在Java)要求。 日志服务器 Apache Flume.tar Flume 是一个分布式、可靠和高可用的服务,用于收集、聚合以及移动大量日志数据,使用一个简单灵活的架构,就...

    java开源包8

    最大限度地减少时间和费用开发自定义的DSL(领域特定语言在Java)要求。 日志服务器 Apache Flume.tar Flume 是一个分布式、可靠和高可用的服务,用于收集、聚合以及移动大量日志数据,使用一个简单灵活的架构,就...

    java开源包10

    最大限度地减少时间和费用开发自定义的DSL(领域特定语言在Java)要求。 日志服务器 Apache Flume.tar Flume 是一个分布式、可靠和高可用的服务,用于收集、聚合以及移动大量日志数据,使用一个简单灵活的架构,就...

    java开源包5

    最大限度地减少时间和费用开发自定义的DSL(领域特定语言在Java)要求。 日志服务器 Apache Flume.tar Flume 是一个分布式、可靠和高可用的服务,用于收集、聚合以及移动大量日志数据,使用一个简单灵活的架构,就...

    Java Web 服务开发-值得一看

    Java Web 服务开发 计成超 内容概要 Java Web服务环境 简单的Web服务 Java处理XML SOAP JWSDP JAXM(Java API for XML Messaging)|SAAJ(SOAP with Attachement API for Java) Java Web服务环境 商业的 IBM Websphere,...

    java开源包1

    最大限度地减少时间和费用开发自定义的DSL(领域特定语言在Java)要求。 日志服务器 Apache Flume.tar Flume 是一个分布式、可靠和高可用的服务,用于收集、聚合以及移动大量日志数据,使用一个简单灵活的架构,就...

    java开源包3

    最大限度地减少时间和费用开发自定义的DSL(领域特定语言在Java)要求。 日志服务器 Apache Flume.tar Flume 是一个分布式、可靠和高可用的服务,用于收集、聚合以及移动大量日志数据,使用一个简单灵活的架构,就...

    java开源包2

    最大限度地减少时间和费用开发自定义的DSL(领域特定语言在Java)要求。 日志服务器 Apache Flume.tar Flume 是一个分布式、可靠和高可用的服务,用于收集、聚合以及移动大量日志数据,使用一个简单灵活的架构,就...

    java开源包7

    最大限度地减少时间和费用开发自定义的DSL(领域特定语言在Java)要求。 日志服务器 Apache Flume.tar Flume 是一个分布式、可靠和高可用的服务,用于收集、聚合以及移动大量日志数据,使用一个简单灵活的架构,就...

    java面试题库2021.pdf

    三、 Java web 开发核心内容 1、 web 编程基础 ①Tomcat 服务器NOWCODER.COM 牛客网——互联网学习求职必备神器 名企校招历年笔试面试真题, 尽在牛客网 牛客网, 互联网人都在用的学习求职神器 ②JSP 语法, EL, ...

    Java资源包01

    最大限度地减少时间和费用开发自定义的DSL(领域特定语言在Java)要求。 日志服务器 Apache Flume.tar Flume 是一个分布式、可靠和高可用的服务,用于收集、聚合以及移动大量日志数据,使用一个简单灵活的架构,就...

    apache-cxf-3.3.4

    SOAP WS-Addressing WS-Policy WS-ReliableMessaging WS-Security WS-SecurityPolicy WS-SecureConversation JAX-WS API,用于Web服务开发 WSDL优先工具 Java优先支持 JAX-RS (JSR 311 1.0) API,用于...

Global site tag (gtag.js) - Google Analytics