Java Web Service

Java Web Service

sf2gis@163.com

2015年7月16日

 

1 目标:提供方法共享,由网络进行交互。

其它的网站或应用在线调用。

网站或应用可以专注于核心功能,而其它功能使用web服务。

2 原理:服务器提供WEB服务与客户端使用SOAP协议交互,HTTP通信。

SOAP协议交互:AXIS、CXF提供。

WEB服务:Java实现。

HTTP通信:Tomcat。

为了解耦web服务与传输方法,AXIS、CXF与HTTP是独立设计的。

WSDL提供xml格式的使用说明。

3 方法:SOAP+CXF+Tomcat。

参考:http://www.widecodes.com/0SxeqjPWqj/cxf-vs-axis-big-xml-over-soap.html

http://5148737.blog.51cto.com/5138737/1604472

3.1 SOAP协议:Simple Object Acess Protocal,简单对象访问协议。

目标:以XML为基础进行数据交换。

方法:CXF(推荐),AXIS。

3.2 方法:CXF(推荐),功能最强大,使用简单,开发效率高,直接与Spring结合。

目标:将HTTP协议与SOAP协议互换,提供Servlet进行服务,生成soap响应。

原理:CXF生成框架(提供将标准POJO转换为servlet,以及SOAP协议转换功能),只需提供POJO服务。

方法:CXF+Spring+Tomcat

3.2.1方法:CXF框架,将CXF框架需要的库(cxf的lib)copy到目标应用lib中。

3.2.2生成POJO服务类

由于使用spring,提供服务的接口和实现类。将class文件copy到web应用的class中。

HelloWorld.java

package cxf.test;

import javax.jws.WebService;

@WebService

public interface HelloWorld

{

  // 一个简单的方法,返回一个字符串

String say(String hello);

}

HelloWorldImpl.java

package cxf.test;

importjavax.jws.WebService; 

 

// WebService实现类.

// 使用@WebService指向Interface定义类即可. 

@WebService(endpointInterface= "cxf.test.HelloWorld") 

public class HelloWorldImplimplements HelloWorld 

      @Override

    public String say(String hello) 

    { 

        return "hello " + hello; 

    } 

}

3.2.3方法:发布WEB服务:配置 Spring+Tomcat。

参考:http://blog.csdn.net/yuvmen/article/details/4790854

3.2.3.1  配置spring:beans.xml。

<?xmlversion="1.0" encoding="UTF-8"?>

<beansxmlns="http://www.springframework.org/schema/beans"

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

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

     xsi:schemaLocation="

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

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

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

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

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

     <jaxws:endpoint id="webServiceHelloWorld"

        address="/HelloWorld"

        implementor="cxf.test.HelloWorldImpl"/>

</beans>

3.2.3.2  配置servlet:web.xml。

<?xmlversion="1.0" encoding="UTF-8"?>

<web-appversion="2.5"

     xmlns="http://java.sun.com/xml/ns/javaee"

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

    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee

    http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">

     <context-param>

        <param-name>contextConfigLocation</param-name>

       <param-value>WEB-INF/beans.xml</param-value>

    </context-param>

    <listener>

        <listener-class>

           org.springframework.web.context.ContextLoaderListener

        </listener-class>

    </listener>

     <servlet>

        <servlet-name>CXFServlet</servlet-name>

         <servlet-class>

             org.apache.cxf.transport.servlet.CXFServlet

         </servlet-class>

     </servlet>

     <servlet-mapping>

        <servlet-name>CXFServlet</servlet-name>

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

     </servlet-mapping>

</web-app>

3.2.4发送WEB请求:weburl?wsdl

3.2.5客户端调用web服务:

目标:使用web服务的共享方法。

原理:从WEB服务的WSDL中获取接口信息,并以此接口创建本地类,类的实现从web服务中获取结果。客户端直接使用本地类POJO。

参考:http://blog.csdn.net/yuvmen/article/details/4790854

方法:创建本地接口,生成web服务本地类,客户端正常调用。

3.2.5.1  创建本地接口:由WSDL生成。使用wsdl2java(位于cxf的bin目录)生成java接口。将生成多个java文件,只需copy接口java到客户端。

格式:

-p           指定其wsdl的命名空间,也就是要生成代码的包名

-d           指定要产生代码所在目录

-client     生成客户端测试web service的代码

-server    生成服务器启动web service的代码

-impl       生成web service的实现代码

-ant         生成build.xml文件

-compile  生成代码后编译

-quient    静默模式,不输出警告与错误信息

-all          生成所有开始端点代码:types,service proxy,serviceinterface, server mainline, client mainline, implementation object, and an Antbuild.xml file.

3.2.5.2  配置Spring Beans:

<?xmlversion="1.0" encoding="UTF-8"?>

<beansxmlns="http://www.springframework.org/schema/beans"

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

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

     xsi:schemaLocation="

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

http://cxf.apache.org/jaxwshttp://cxf.apache.org/schema/jaxws.xsd">

    <bean id="client" class="cxf.test.HelloWorld"

     factory-bean="clientFactory"factory-method="create"/>

    <bean id="clientFactory"class="org.apache.cxf.jaxws.JaxWsProxyFactoryBean">

       <property name="serviceClass"value="cxf.test.HelloWorld"/>

       <propertyname="address"value="http://localhost:8080/cxf2/services/HelloWorld"/>

     </bean>

</beans>

3.2.5.3  生成web服务本地类供客户端调用:

package cxf.test;

importorg.springframework.context.support.ClassPathXmlApplicationContext;

import cxf.test.HelloWorld;// necessary

public final class Client {

    private Client() { }

    public static void main(String args[])throws Exception {

        ClassPathXmlApplicationContext context = newClassPathXmlApplicationContext(new String[]{"cxf/test/client-beans.xml"});

        HelloWorld client =(HelloWorld)context.getBean("client");

        String response =client.say("Joe");

        System.out.println("Response:" + response);

        System.exit(0);

    }

}

3.3 AXIS:配置复杂

AXIS1,AXIS2:比较早的web服务实现,AXIS1功能简单,使用也较简单,但06年之后不再更新。Axis2虽然功能有加强,但操作太过复杂,文档也比较乱(CXF的一项特性就是:容易使用)。

目标:进行web服务的SOAP规范实现。

3.3.1方法:AXIS1的使用方法。

发布WEB服务:将axis文档copy到tomcat。将服务.java文件更名为.jws(不要使用包,使用包的配置更麻烦)放到axis下。

发送WEB请求:http://localhost:8080/axis/HelloService.jws?method=sayHello&parameter=xx

处理WEB响应:axis应用下的jws类。

3.3.2方法:AXIS2使用方法

参考:http://blog.csdn.net/ghsau/article/details/12714965

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

弗里曼的小伙伴

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值