Java WebService _CXF、Xfire、AXIS2、AXIS1_四种发布方式(使用整理)

目录

1. CXF方式
2. Xfire方式
3. AXIS2方式
4. AXIS1方式
5. AXIS1客户端调用
6. AXIS2客户端调用
7. CXF客户端调用
8. Web Service Client客户端调用

 

1.CXF方式

  CXF与spring搭建webservice是目前最流行的方式,但是传闻cxf与jdk1.5有些不兼容,我没有遇到过,我遇到的问题是cxf与was6.1.1不兼容

  表现在cxf必须的jar包“wsdl4j-1.6.2.jar”报错,报的错为: java.lang.IncompatibleClassChangeError,明显的jar包不兼容问题,很是头痛,后来查找资料找到解决办法是:

  将上述jar包新建一个was共享库,可以解决。

 使用cxf+spring搭建WebService:

  第一步,添加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 SendServiceImpl implements 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方式很简单且容易配置,不知为啥过时了,也没感觉cxf、axis2哪里先进,我当时卡在cxf与was搞不定时想尝试xfire方式被周经理给拒绝了。

Xfire方式发布webservice:

第一步,添加jar包,如下:

第二步,修改web.xml文件

<servlet>
    <servlet-name>XFireServletservlet-name>
    <servlet-class>org.codehaus.xfire.transport.http.XFireConfigurableServletservlet-class>
    <load-on-startup>0load-on-startup>
servlet>

<servlet-mapping>
    <servlet-name>XFireServletservlet-name>
    <url-pattern>/services/*url-pattern>
servlet-mapping>

第三步,编写接口类

接口类:
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方式。

Axis2发布WebService:

第一步,添加jar包,如下:很多是吧,不过都是从axis.war里面WEB-INF下的lib目录复制来的。

第二步,修改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方式

同上,不知道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">

 
                    

你可能感兴趣的:(Java WebService _CXF、Xfire、AXIS2、AXIS1_四种发布方式(使用整理))