JDK1.6 自带webservice构建

JDK1.6中自带了webservice的功能,因为集成了JAX-WS,这非常方便,不用再用第三方包来开发了。

下面我们开始构建:

  1,先用Eclipse建立一个动态网站,注意需要生成web.xml,建工程的时候不要忘记勾选;

  2,建立类实现Web Services接口,下面是一个简单定义Web Services接口的实现类:

代码


1 package javaWebServiceTest; 2  3  import javax.jws.WebMethod; 4  import javax.jws.WebParam; 5  import javax.jws.WebResult; 6  import javax.jws.WebService; 7  import javax.jws.WebParam.Mode; 8  import javax.jws.soap.SOAPBinding; 9  import javax.jws.soap.SOAPBinding.Style;10  import javax.jws.soap.SOAPBinding.Use;11 12  import webServiceInterface.Person;13 14 @WebService(name="SayHello", portName="SayHellowServicePort", serviceName="SayHelloServiceName",15          targetNamespace="http://www.webservice.com")16 @SOAPBinding(style = Style.RPC,use = Use.LITERAL)  17 public class ChService {18     19     @WebMethod(action="sayHello", operationName="saySomeWord")20     @WebResult(name="Person", partName="PersonName")21     public Person sayHelloWord(@WebParam(name="paramA", partName="p1", mode = Mode.IN)String name){22         Person persons = new Person();23         persons.setName("My name is " +name);24         return persons;25     }26 27 }28

    

3,Person类


1 package webServiceInterface; 2  3  4 public class Person 5 { 6     String name; 7  8     public String getName() { 9         return name;10     }11 12     public void setName(String name) {13         this.name = name;14     }15 }

这样,我们基本上就实现了webservice的构建,是不是感觉不是很难,跟写普通的java方法一样,其实jdk自带的webservice是通过注释注入方法实现的。所以上面那些以"@"符号开头的都是非常重要的,也是必须的。

下面我们来配置我们写的WebService到Apache中:

1,上面第一步,我们生成了一个web.xml类,我们向<web-app>节点里面加入以下内容:

代码


1 <listener>           2     <listener-class>   3             com.sun.xml.ws.transport.http.servlet.WSServletContextListener    4     </listener-class>   5   </listener>  6       7     <servlet>   8         <servlet-name>TestService</servlet-name>   9         <servlet-class>  10             com.sun.xml.ws.transport.http.servlet.WSServlet   11         </servlet-class>  12     </servlet>  13       14     <servlet-mapping>  15         <servlet-name>TestService</servlet-name>  16         <url-pattern>/jdkService</url-pattern> 17     </servlet-mapping>

2,在web.xml的目录中再建立一个sun-jaxws.xml来配置endpoint的相关内容。

代码


1 <?xml version="1.0" encoding="UTF-8"?>2 <endpoints xmlns=‘http://java.sun.com/xml/ns/jax-ws/ri/runtime‘ version=‘2.0‘>   3     <endpoint4     name=‘TestService‘5     implementation=‘javaWebServiceTest.ChService‘6     binding="http://java.sun.com/xml/ns/jaxws/2003/05/soap/bindings/HTTP/"7     url-pattern=‘/jdkService‘/>8 </endpoints>

好了,配置完了。把我们建立的项目加入到apache7.0中,然后启动。

在浏览器输入:http://localhost:8080/TestWebService/jdkService?wsdl,便可以访问到。

如图:

现在我们来说说那些以"@"符号开头的内容。

1,@WebService(name="SayHello", portName="SayHellowServicePort",  serviceName="SayHelloServiceName", targetNamespace="http://www.possystem.com")

name: SayHello
  用户实例化用,例:
      private WinService.SayHelloClient win = new winformService.WinService.SayHelloClient();
  WSDL中:<portType name="SayHello">
 serviceName: SayHelloServiceName
      指定Web Service的名称 ,WSDL中:<service name="SayHelloServiceName">
 portName: SayHellowServicePort
       WSDL中:<port name="SayHellowServicePort" binding="tns:SayHellowServicePortBinding">   
 wsdlLocation:wsdlLocation 是引用预先存在的 WSDL 文件的 URL(相对或绝对)。
 targetNamespace:wsdl命名空间

2,@SOAPBinding(style = Style.RPC,use = Use.LITERAL) 
style: 定义发送到 Web Service 的消息和从 Web Service 发送的消息的编码样式。
        Document和RPC两种形式    
        默认值:
             javax.jws.soap.SOAPBinding.Style.DOCUMENT 
         
   use:  定义发送到 Web Service 的消息和从 Web Service 发送的消息的格式样式。          
         ENCODED和 LITERAL两种形式

默认值:
             javax.jws.soap.SOAPBinding.Use.LITERAL

3, @WebMethod(action="sayHello", operationName="saySomeWord")

action: sayHello
     此操作的动作。 对于 SOAP 绑定,此方法可确定 soap 动作的值。
     WSDL中: <soap12:operation soapAction="sayHello" />
  operationName: sayHelloWord1
     与此方法匹配的 wsdl:operation 的名称。
     此名称也用于客户端调用的方法的名称。
  exclude 
         将某一方法标记为不作为一个 web 方法公开。

4, @WebResult(name="Person", partName="PersonName")

name: Person
     返回值的名称。 如果操作是 rpc 样式,并且partName尚未指定, 表示此返回值的 wsdl:part 的名称
     WSDL中:<part name="Person" type="tns:person" /> 
  partName: PersonName
     表示此返回值的 wsdl:part 的名称。 
     此名称只在操作是 rpc 样式,或者操作是文档样式且参数样式为 BARE 时使用。
     WSDL中:<part name="PersonName" type="tns:person" />

5,  public Person sayHelloWord(@WebParam(name="paramA", partName="p1", mode = Mode.IN)String name){……}
   name: paramA
   如果该操作是 rpc 样式的,并且尚未指定 @WebParam.partName,则此名称是表示参数的 wsdl:part 的名称。
   如果该操作是文档样式的,或者参数映射到某一个头,则此名称是表示参数的 XML 元素的本地名称。 
   如果操作是文档样式的,参数样式为 BARE 并且模式为 OUT 或 INOUT,则必须指定一个名称。
   客户端调用时参数名称显示该值。
  partName: p1
   表示此参数的 wsdl:part 的名称。 
   此名称仅在操作是 rpc 样式,或者操作是文档样式且参数样式为 BARE 时使用。 
   WSDL中:
    <message name="sayHelloWord1">
       <part name="p1" type="xsd:string" /> 
      </message>
     客户端调用时参数名称显示该值。
    这个主要是根据样式来。
    mode:参数的流向(IN、OUT 或 INOUT 之一)。

以上只是对一些常用的作了一些解释,都是自我理解的,有不正确的地方,还请指正。    

时间: 2024-08-24 03:55:28

JDK1.6 自带webservice构建的相关文章

jenkins带参数构建

背景: 同一个job想构建两个不同的文件 方案: 通过jenkins的带参数构建来选择构建哪个文件 实施: 设置参数: 2.使用参数: 原文地址:https://www.cnblogs.com/cxl07325/p/10450085.html

P7架构师带你构建高可用ZooKeeper集群

前言: ZooKeeper 是 Apache 的一个顶级项目,为分布式应用提供高效.高可用的分布式协调服务,提供了诸如数据发布/订阅.负载均衡.命名服务.分布式协调/通知和分布式锁等分布式基础服务.由于 ZooKeeper 便捷的使用方式.卓越的性能和良好的稳定性,被广泛地应用于诸如 Hadoop.HBase.Kafka 和 Dubbo 等大型分布式系统中. 本文的目标读者是对 ZooKeeper 有一定了解的技术人员,将从 ZooKeeper 运行模式.集群组成.容灾和水平扩容四方面逐步深入,

JDK1.6 自动生成WebService客户端代码

到需要生成客户端代码的项目根目录下执行 wsimport -keep  http://localhost:8080/HelloService?wsdl 命令即可 http://localhost:8080/HelloService是服务端地址

Nginx 自带模块构建流媒体服务

              Nginx 部署流媒体服务 Nginx 平滑升级 参考地址 http://zhangge.net/4856.html 主机名 IP地址 Ngin版本 系统版本 备注 Nginx-Streaming-media 192.168.1.180 nginx/1.9.4 Cenots6.6 V1 1.软件依赖环境 yum –y install  gcc* make GeoI GeoIP-data GeoIP-devel  zlib zlib-devel openssl open

JDK1.8源码逐字逐句带你理解LinkedHashMap底层

数据存储结构 我们已经知道HashMap是以散列表的形式存储数据的,LinkedHashMap继承了HashMap,所以LinkedHashMap其实也是散列表的结构,但是"linked"是它对HashMap功能的进一步增强,LinkedHashMap用双向链表的结构,把所有存储在HashMap中的数据连接起来.有人会说散列表不是已经有了链表的存储结构了嘛,为什么还要来个双向链表?桶(桶的概念就是数组的一个存储节点,比如说arr[0]是一个桶,arr[1]也是一个桶)中的链表和这个双向

几种流行Webservice框架性能对比

1摘要 开发webservice应用程序中离不开框架的支持,当open-open网站列举的就有很多种,这对于开发者如何选择带来一定的疑惑.性能Webservice的关键要素,不同的框架性能上存在较大差异,而当前在官方网站.网络资料中可以方便的找到各自框架的介绍,但是很少有针对不同框架性能测试数据.本文选择了比较流行几个框架: Apache Axis1.Apache Axis2.Codehaus XFire.Apache CXF.Apache Wink.Jboss  RESTEasy.sun JA

你真的了解JAVA中与Webservice相关的规范和实现吗?

非常多人在项目中使用Webservice,仅仅是知道怎样公布Webservice,怎样调用Webservice,但真要论其来龙去脉,还真不一定清楚. 一切一切还要从我们伟大的sun公司规范说起. JAVA 中共同拥有三种WebService 规范,各自是JAXM&SAAJ.JAX-WS(JAX-RPC).JAX-RS. 以下来分别简要的介绍一下这三个规范.针对JDK 1.6以下版本号,新的还没研究过 (1.)JAX-WS: JAX-WS(Java API For XML-WebService),

基于CXF框架的webservice简单的SC两端出入拦截器实现。

开发工具:  ECLIPSE(EE) + CXF(2.5.9) (I)可以现在eclipse中使用JDK来创建webservice基础服务.(没有CXF框架的webservice) (1)新建一个java project. (命名为FirstWebService) 新建一个interface接口.改接口就是相当于webservice中的SEI. (在接口类定义前使用JDK自带webservice注释[email protected] SEI方法则是使用@WebMethod生命方法.) (2)在定

XFile客户端调用JDK1.6+的webserivce时参数为null

Webservice的服务端用JDK1.6+自带的Webservice做的,客户端用的是XFile的webservice调用的,但是传过来的参数为NULL. XFile的调用方式是: String wsdl = "http://192.168.1.112:8088/testService?wsdl"; try { Client client = new Client(new URL(wsdl)); String result = client.invoke("test&quo