《WebService》 ——应用

一、四种常用的发布方式

1. CXF方式

Apache CXF是一个开源服务框架。Apache CXF = Celtix + XFire,Apache CXF 的前身叫 Apache CeltiXfire,现在已经正式更名为 Apache CXF 了,以下简称为 CXF。CXF 继承了Celtix和XFire两大开源项目的精华,比如:JAX-WS and JAX-RS,主要特性包括:

l  支持Web services标准。包括:SOAP、the WSI Basic Profile、WSDL、WS-Addressing、WS-Policy、WS-ReliableMessaging、WS-Security、WS-SecureConversation和WS-SecurityPolicy.

l  支持不同类型前端开发模型。CXF实现了JAX-WS APIs,支持JAX-RS开发。

l  容易使用。CXF设计的简洁和直观,具有简洁APIs迅速的构建基于代码的服务,Maven插件使得工具集成更加容易、JAX-WS API支持、Spring 2.x XML使得配置更加容易。

l  支持二进制和遗留协议。CXF被设计为可插拔的架构,在不同的传输协议结合下,不仅支持XML,也支持非XML类型绑定,例如:JSON和CORBA。

缺点是可能与jdk1.5有些不兼容、was6.1.1不兼容,表现在cxf必须的jar包“wsdl4j-1.6.2.jar”报错,报的错为: java.lang.IncompatibleClassChangeError,但是axis2不会,使用cxf+spring搭建WebService:

第一步,添加jar包,自己下载对应jar包

第二步,配置web.xml文件,如下(重要的地方已标记):

<context-param>

<param-name>contextConfigLocationparam-name>

<param-value>classpath:/applicationContext.xmlparam-value>

context-param>

   <listener>     <listener-class>org.springframework.web.context.ContextLoaderListenerlistener-class>

   listener>

  

<filter>

<filter-name>encodingFilterfilter-name>

<filter-class>org.springframework.web.filter.CharacterEncodingFilterfilter-class>

<init-param>

<param-name>encodingparam-name>

<param-value>UTF-8param-value>

init-param>

filter>

<filter-mapping>

<filter-name>encodingFilterfilter-name>

<url-pattern>/*url-pattern>

filter-mapping>

   <servlet>

        <servlet-name>CXFServletservlet-name>  <servlet-class>org.apache.cxf.transport.servlet.CXFServletservlet-class>

        <load-on-startup>1load-on-startup>

    servlet>

    <servlet-mapping>

           <servlet-name>CXFServletservlet-name>

           <url-pattern>/webservice/*url-pattern>

    servlet-mapping>

上述标记的地方,第一处是spring配置文件路径;第二出是wsdl地址内容;

第三步,编写接口类与实现类,注意注解

接口类

@WebService

public interface SendService {

public boolean sendOA(@WebParam(name="param")String param);

public boolean sendOrg(OrgEntity org);

}

实现类

@WebService(endpointInterface="com.service.SendService",serviceName="sendService")

public class SendServiceImplimplements SendService{

public boolean sendOA(String param) {

System.out.println("-------sendOA---------param:"+param);

if(param.equals("zhoujian")){

return true;

}

return false;

}

public boolean sendOrg(OrgEntity org) {

System.out.println("-------sendOrg--begin-------");

return true;

}

}

第四步,Spring配置文件

xml version="1.0" encoding="UTF-8"?>

<beans

xmlns="http://www.springframework.org/schema/beans"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xmlns:p="http://www.springframework.org/schema/p"

xmlns:jaxws="http://cxf.apache.org/jaxws"

    xsi:schemaLocation="

      http://www.springframework.org/schema/beans

      http://www.springframework.org/schema/beans/spring-beans.xsd

      http://cxf.apache.org/jaxws

      http://cxf.apache.org/schemas/jaxws.xsd">

<import resource="classpath:META-INF/cxf/cxf.xml"/>

    <import resource="classpath:META-INF/cxf/cxf-extension-soap.xml"/>

   <import resource="classpath:META-INF/cxf/cxf-servlet.xml"/>

  

   <jaxws:endpoint id="sendServie" implementor="com.service.impl.SendServiceImpl" 

address="/sendServie" />

 

 

beans>

“jaxws:client”该标签可以不必写,访问时可以手动拼接该url

第五步,发布,直接部署到服务器,访问:

http://10.137.138.11:9080/Wb/webservice/sendServie?wsdl

2. Xfire方式

xfire方式已经很老了,现在用的少了,但是我现在的项目还是使用的,这是之前的同事们做的,不知道是怎么考虑的

Xfire方式发布webservice:

第一步,添加jar包,下载对应jar包

第二步,修改web.xml文件

    XFireServlet

    org.codehaus.xfire.transport.http.XFireConfigurableServlet

    0

  

  

    XFireServlet

    /services/*

  

第三步,编写接口类

接口类:

public abstract interface IBankingService {

public abstract String transferFunds(String paramString1);

}

实现类:

public class BankingService implements IBankingService{

  public String transferFunds(String fromAccount)

  {

    return fromAccount+":ok";

  }

}

第四步,编写services.xml配置文件

在WEB-INF目录下新建目录META-INF,在该目录下新建文件夹xfire,该目录下新建文件services.xml

xml version="1.0" encoding="UTF-8"?>

<beans xmlns="http://xfire.codehaus.org/config/1.0">

<service>

<name>Bankingname>

<namespace>mybanknamespace>

<serviceClass>

com.mybank.xfire.example.IBankingService

serviceClass>

<implementationClass>

com.mybank.xfire.impl.BankingService

implementationClass>

service>

beans>

第五步,发布,部署到服务器,访问url:

http://localhost:9080/Xfire/services/Banking?wsdl

3. AXIS2方式

Axis2发布WebService有两种方式,其一是利用axis2插件打成aar包放到axis_war里面部署到服务器发布;其二是不打包发布(本例);我不清楚打包发布有什么好处,感觉很麻烦项目外还得部署一个war,现在介绍第二种不打包的方式,类似xfire,同时由于cxf与was不兼容导致wsdl.jar报错,但是xfire与axis2也用到wsdl.jar却不报错

Axis2发布WebService:

第一步,添加jar包,下载对应jar包

第二步,修改web.xml文件

<servlet>

        <servlet-name>AxisServletservlet-name>  <servlet-class>org.apache.axis2.transport.http.AxisServletservlet-class>

        <load-on-startup>1load-on-startup>

    servlet>

    <servlet-mapping>

        <servlet-name>AxisServletservlet-name>

        <url-pattern>/services/*url-pattern>

    servlet-mapping>

 

第三步,编写实现类

public class ServiceImpl {

public String sayHello(String name){

System.out.println("================");

return "hello:"+name;

}

}

第四步,增加WEN-INF内容

将axis.war解压下的WEN-INF文件夹内的conf、modules复制到项目WEB-INF下

第五步,在WEB-INF下创建文件夹services(名字不可改),在该目录下创建文件夹(名称随意),在该目录下创建文件夹META-INF(名称不可改),在该目录下创建文件services.xml(名称不可改),该文件内容为:

xml version="1.0" encoding="UTF-8"?>

<service name="axisDemo">

    <description>

        Web Service例子

    description>

    <parameter name="ServiceClass">

        com.ServiceImpl

    parameter>

    <messageReceivers>

        <messageReceiver mep="http://www.w3.org/2004/08/wsdl/in-out"

            class="org.apache.axis2.rpc.receivers.RPCMessageReceiver" />

        <messageReceiver mep="http://www.w3.org/2004/08/wsdl/in-only"

       class="org.apache.axis2.rpc.receivers.RPCInOnlyMessageReceiver" />

    messageReceivers>

service>

第六步,部署到服务器,发布URL为:

http://localhost:9080/Axis2Test/services/axisDemo?wsdl

4. AXIS1方式

第一步,添加jar包

第二步,修改web.xml

<servlet>

    <servlet-name>AxisServletservlet-name>

    <servlet-class>

        org.apache.axis.transport.http.AxisServlet

    servlet-class>

  servlet>

  <servlet-mapping>

    <servlet-name>AxisServletservlet-name>

    <url-pattern>/services/*url-pattern>

  servlet-mapping>

第三步,实现类与实体类

实现类:

package com;

public class Axis {

public String sayHello(String name){

System.out.println("============:"+name);

return "hi:"+name;

}

public String sayHelloToUser(User u){

System.out.println("============:"+u.getId());

System.out.println("============:"+u.getPath());

System.out.println("============:"+u.getAdd());

return "hi:"+u.getName();

}

}

 

 

实体类:

package com;

public class User {

private String id;

private String name;

private String add;

private String path;

    

    getter setter ……方法

 

第四步,创建配置文件:在WEB-INF下新建文件“server-config.wsdd”

xml version="1.0" encoding="UTF-8"?>

<deployment xmlns="http://xml.apache.org/axis/wsdd/"

         xmlns:java="http://xml.apache.org/axis/wsdd/providers/java">

 

你可能感兴趣的:(TECHNOLOGY)