`
dota14174
  • 浏览: 8163 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

jax-ws webservice编程

 
阅读更多
1.理解JAX-WS

1.1JAX-WS概述
JAX-WS2.0 的全称为 Java API for XML-Based Webservices (JAX-WS) 2.0。JAX-WS 2.0 是对 JAX-RPC 1.0 规范的扩展,是 JAX-RPC 1.1 的后续版本, JAX-RPC 2.0 标准发布不久后便被重新命名为 JAX-WS 2.0。 JAX-WS 2.0 是面向 Java 5 的开发 Web services 的最新编程标准,它提供了新的编程模型和对以往的 JAX-RPC 方式的 Web services 进行了增强。 JAX-WS2.0 (JSR 224)是Sun新的web services协议栈,是一个完全基于标准的实现。在binding层,使用的是the Java Architecture for XMLBinding (JAXB, JSR 222),在parsing层,使用的是the Streaming API for XML (StAX, JSR 173),同时它还完全支持schema规范。
1.2JAX-WS 2.1特性
支持SOAP 1.1(默认)、1.2
支持XML/HTTP Binding
支持WS-Addressing
支持document/literal样式
支持WS-I Basic Profile 1.1
支持消息传输优化机制(Message Transmission Optimization Mechanism,MTOM)

2.准备工作

(1) jdk 1.6,j2ee-eclipse
(2) JAXWS2.2.7-20120813(http://jax-ws.java.net/),下载后解压。

3.在eclipse中新建web工程

在工程下新建目录wssrc,wsdl,build,与src目录平级
4.开始书写第一个web service


Java代码 
package ethan.webservice; 
 
import java.util.List; 
 
import javax.jws.WebMethod; 
import javax.jws.WebService; 
 
import ethan.webservice.bean.User; 
 
@WebService 
public interface IHello { 
    @WebMethod 
    public List<User> sayHello(String user); 



Java代码 
package ethan.webservice.impl; 
 
import java.util.ArrayList; 
import java.util.List; 
 
import javax.jws.WebService; 
 
import ethan.webservice.IHello; 
import ethan.webservice.bean.User; 
 
@WebService(endpointInterface = "ethan.webservice.IHello",  
portName = "HelloServicePort",  
serviceName = "HelloService",  
targetNamespace = "http://www.ethanSKY.com/webservice/hello") 
public class HelloImpl implements IHello { 
 
    @Override 
    public List<User> sayHello(String user) { 
        System.out.println("=================start=================="); 
        List<User> users = new ArrayList<User>(); 
        User u1 = new User(); 
        u1.setId("1"); 
        u1.setName("name1"); 
        User u2 = new User(); 
        u2.setId("2"); 
        u2.setName("name2"); 
        users.add(u1); 
        users.add(u2); 
        System.out.println("2:"+user); 
        System.out.println("=================end=================="); 
        return users; 
    } 
 

注意:

@WebService
注释在了Class之上,这告诉了JAXWS,此类为Webservice。
@WebMethod
注释在了public方法上,这告诉了JAXWS,此方法为soap方法。

5.通过Java类编译Webservice
JAX-WS 2.0 有两种开发过程:自顶向下和自底向上。自顶向下方式指通过一个 WSDL 文件来创建Web Service,自底向上是从 Java 类出发创建 Web Service。两种开发过程最终形成的文件包括:
1.SEI。一个SEI对应WSDL中WebService的一个port,在Java中是一个Java接口。
2.SEI实现类。
3.WSDL和XSD文件。
结合公司内项目的特点,我们更多的是碰到以下两种情况:
1.  Onsite要我们做一个Webservice或者是客户要求我们提供Webservice接口;
2.  Onsite已经有一个Webservice了,现在要我们做客户端集成。

因此,我们选用Server端通过Java Class生成webservice,而客户端通过wsdl生成Java调用类的做法。

JAXWS为我们提供了两个工具:

(1)wsgen
主要用于Server端通过Java类编译成Webservice及相关的wsdl文件
(2)wsimport
主要用于Client端(调用端)通过wsdl编译出调用Server端的Java文件


我们就来生成一下上面的这个Hello,打开命令行工具,输入如下命令:
wsgen -cp /home/ethan/workspace/work/jax-ws-server/WebContent/WEB-INF/classes ethan.webservice.impl.HelloImpl -wsdl -s wssrc -r wsdl
注:

-wsdl参数代表生成webservice
- s参数代表生成的.java文件置于何处
-d 参数代表生成的编译class文件置于何处(这个可以忽略,我们利用eclipse编译)
-r 参数代表生成的.wsdl文件与.xsd文件生成在何处
-cp参数代表classpath,即HelloImpl.class的所在


生成的java文件在wssrc目录下,将其拷贝到src目录。
同时在wsdl目录会生成四个文件,两个是wsdl文件两个是xsd文件。

6.部署webservice


在工程的WEB-INF目录下建立“sun-jaxws.xml”文件,内容如下:

Java代码 
<?xml version="1.0" encoding="UTF-8"?> 
<endpoints xmlns="http://java.sun.com/xml/ns/jax-ws/ri/runtime" 
    version="2.0"> 
    <endpoint name="HelloService" implementation="ethan.webservice.impl.HelloImpl" 
        url-pattern="/HelloService" /> 
</endpoints> 
修改web.xml文件,如下:


Java代码 
<listener> 
<listener-class>com.sun.xml.ws.transport.http.servlet.WSServletContextListener</listener-class> 
</listener> 
 
<servlet> 
        <servlet-name>HelloService</servlet-name> 
        <servlet-class>com.sun.xml.ws.transport.http.servlet.WSServlet</servlet-class> 
        <load-on-startup>2</load-on-startup> 
</servlet> 
<servlet-mapping> 
        <servlet-name>HelloService</servlet-name> 
        <url-pattern>/HelloService</url-pattern> 
</servlet-mapping> 
将JAXWS2.2.7-20120813中lib目录下的jar包导入工程。


将内容部署到应用服务器中,启动应用服务器,访问:http://localhost:8080/jax-ws-server/HelloService?wsdl,出现内容即代表完成服务端部署。


7.客户端开发


利用wsimport生成客户端
在eclipse中新建java工程,在命令行输入:wsimport -keep -d bin -s src wsdl/HelloService.wsdl
生成的HelloService.java中
            将url = new URL(baseUrl, "file:/home/ethan/workspace/work/jax-ws-client/wsdl/HelloService.wsdl");
改为:url = new URL(baseUrl, "http://localhost:8080/jax-ws-server/HelloService");

8.书写测试类:
Java代码 
public class HelloServiceTest { 
    public static void main(String args[]){ 
        HelloService service = new HelloService(); 
        IHello port = service.getHelloServicePort(); 
        List<User> users = port.open("aaa"); 
        System.out.println(users.size()); 
    } 

大功告成!
分享到:
评论

相关推荐

    CXF创建webservice服务端.doc

    2. Frontends:CXF 支持多种“Frontend”编程模型,CXF 实现了 JAX-WS API (遵循 JAX-WS 2.0 TCK 版本),它也包含一个“simple frontend”允许客户端和 EndPoint 的创建,而不需要 Annotation 注解。CXF 既支持 ...

    CXF的学习笔记

    Frontends:CXF 支持多种“Frontend”编程模型,CXF 实现了 JAX-WS API (遵循 JAX-WS 2.0 TCK 版本),它也包含一个“simple frontend”允许客户端和 EndPoint 的创建,而不需要 Annotation 注解。CXF 既支持 WSDL ...

    WebService with Apache CXF

    Apache CXF 是一个开源的 Services 框架,CXF 帮助您利用 Frontend 编程 API 来构建和开发 Services ,像 JAX-WS 。这些 Services 可以支持多种协议,比如:SOAP、XML/HTTP、RESTful HTTP 或者 CORBA ,并且可以在...

    CXF WEBSERVICE入门,非常详细实用

    Apache CXF 是一个开源的 Services 框架,CXF 帮助您利用 Frontend 编程 API 来构建和开发 Services ,像 JAX-WS 。这些 Services 可以支持多种协议,比如:SOAP、XML/HTTP、RESTful HTTP 或者 CORBA ,并且可以在...

    WebSer之CXF框架例子.docx

    Apache CXF 是一个开源的 Services 框架,CXF 帮助您利用 Frontend 编程 API 来构建和开发 Services ,像 JAX-WS 。这些 Services 可以支持多种协议,比如:SOAP、XML/HTTP、RESTful HTTP 或者 CORBA ,并且可以在...

    JAVA.WEB服务.构建与运行

     《Java Web 服务:构建与运行(影印版)》提供了对Java的API的一个全面介绍,包括针对XML Web服务的JAX-WS和针对RESTful Web服务的JAX-RS。《Java Web服务:构建与运行》通过提供混合架构概述、完整的工作代码示例...

    基于Apache CXF构建SOA应用 随书源代码

    覆盖以下内容:基于JAX-WS规范和CXF自身的前端模式实现,CXF支持的数据绑定(DataBindings),CXF支持的WSDL绑定,CXF支持的传输协议绑定。CXF的调式、配置、日志、发布和工具。CXF实现RESTful服务。CXF对WS-* 的...

    Java全栈工程师-Apache CXF

    本课程讲解CXF的JAX-WS方式开发WebService的服务端和客户端?本课程讲解CXF的JAX-RS注解方式开发WebService的服务端和客户端?本课程讲解SpringBoot整合CXF开发WebService

    经典JAVA.EE企业应用实战.基于WEBLOGIC_JBOSS的JSF_EJB3_JPA整合开发.pdf

    第二部分详细讲解了jsf ri、jta、jndi、rmi、jms、javamail、ejb 3的session bean、message driven bean、jpa、jax-ws 2、jaas等java ee知识,这部分知识以jsf+ejb 3+jpa整合开发为重点,通过使用netbeans ide工具...

Global site tag (gtag.js) - Google Analytics