加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

webservice框架

发布时间:2020-12-17 00:54:09 所属栏目:安全 来源:网络整理
导读:webservice框架 jdk自带的JWS CXF XFire创建WebService实例应用 Axis2 Apache Wink resteasy dubbo webservice框架 jdk自带的JWS eg: 1、服务器端建立 1.1、创建接口 [java] view plaincopy @WebService public interface IWebService { int add(int a,int

  • webservice框架
    • jdk自带的JWS
    • CXF
    • XFire创建WebService实例应用
    • Axis2
    • Apache Wink
    • resteasy
    • dubbo

webservice框架

jdk自带的JWS

eg:
1、服务器端建立
1.1、创建接口
[java] view plaincopy
@WebService
public interface IWebService {
int add(int a,int b);
int subtract(int a,int b);
}
1.2、创建实现类
[java] view plaincopy
@javax.jws.WebService(endpointInterface = “org.gwr.service.IWebService”)
public class WebService implements IWebService {
@Override
public int add(int a,int b) {
System.out.println(a + “+” + b + “=” + (a + b));
return a + b;
}
@Override
public int subtract(int a,int b) {
System.out.println(a + “-” + b + “=” + (a - b));
return a - b;
}
}

1.3、部署服务
直接用Endpoint就可以发布部署,无需服务器
[java] view plaincopy
public class ReleaseService {
public static void main(String[] args) {
String address = “http://localhost:8888/ns“;
Endpoint.publish(address,new WebService());
}
}

2、客户端建立

调用webService

[java] view plaincopy
public class CallService {
public static void main(String[] args) {
// 创建访问wsdl服务地址的url
try {
URL url = new URL(“http://localhost:8888/ns?wsdl“);
// 通过Qname指明服务的具体信息
QName sname = new QName(“http://service.gwr.org/“,
“WebServiceService”);
// 创建服务
Service service = Service.create(url,sname);
// 实现接口
IWebService ms = service.getPort(IWebService.class);
System.out.println(ms.add(12,33));
} catch (MalformedURLException e) {
e.printStackTrace();
}
}
}

CXF

该框架提供了以下功能:

Web 服务标准支持:CXF 支持以下 Web 服务标准:
    Java API for XML Web Services (JAX-WS)
    SOAP
    Web 服务描述语言(Web Services Description Language ,WSDL)
    消息传输优化机制(Message Transmission Optimization Mechanism,MTOM)
    WS-Basic Profile
    WS-Addressing
    WS-Policy
    WS-ReliableMessaging
    WS-Security

1 首先服务点接口。

package com.demo;



      import java.util.List;

      import javax.jws.WebParam;
      import javax.jws.WebService;


      @WebService
      public interface HelloWorld {
           String sayHi(@WebParam(name="text")String text);
           String sayHiToUser(User user);
           String[] SayHiToUserList(List<User> userList);
       }



 2  编写服务实现

     package com.demo;

     import java.util.LinkedHashMap;
     import java.util.List;
     import java.util.Map;

     import javax.jws.WebService;



     @WebService(endpointInterface="com.demo.HelloWorld",serviceName="HelloWorld")
     public class HelloWorldImpl implements HelloWorld {

                Map<Integer,User> users = new LinkedHashMap<Integer,User>();


                public String sayHi(String text) {
                            return "Hello " + text;
               }



               public String sayHiToUser(User user) {
                         users.put(users.size()+1,user);
                         return "Hello "+ user.getName();
               }

               public String[] SayHiToUserList(List<User> userList) {
                         String[] result = new String[userList.size()];
                         int i=0;
                         for(User u:userList){
                              result[i] = "Hello " + u.getName();
                              i++;
                         }
                 return result;
               }
   }

3 编写 webServiceApp.java类来暴露 web服务。

package com.demo;

  import javax.xml.ws.Endpoint;



  public class webServiceApp {
             public static void main(String[] args) {
                       System.out.println("web service start");
                       HelloWorldImpl implementor= new HelloWorldImpl();
                       String address="http://localhost:8080/helloWorld";
                       Endpoint.publish(address,implementor);
                       System.out.println("web service started");
              }
  }

4 run webServiceApp.java 类来启动服务。 访问 http://localhost:8080/helloWorld?wsdl 查看是否显示

wsdl。

5 编写客户端访问服务。

package com.demo;

 import java.util.ArrayList;
 import java.util.List;

 import org.apache.cxf.jaxws.JaxWsProxyFactoryBean;
 import org.springframework.context.support.ClassPathXmlApplicationContext;



 public class HelloWorldClient {
          public static void main(String[] args) {
                    JaxWsProxyFactoryBean svr = new JaxWsProxyFactoryBean();
                    svr.setServiceClass(HelloWorld.class);
                    svr.setAddress("http://localhost:8080/helloWorld");
                    HelloWorld hw = (HelloWorld) svr.create();
                    User user = new User();
                    user.setName("Tony");
                    user.setDescription("test");
                    System.out.println(hw.sayHiToUser(user));
          }
 }

6 测试: run webServiceApp.java 类来启动服务,然后 run HelloWorldClient.java 来访问服务。

XFire创建WebService实例应用

XFire使得在JavaEE应用中发布Web服务变得轻而易举。和其他Web服务引擎相比,
XFire的配置非常简单,可以非常容易地和Spring集成。
下载地址:http://xfire.codehaus.org/Download。

一. 使用XFire发布WebService

  1. 创建service接口

Java代码 收藏代码

package com.test.service;  
 import com.test.service.bean.User;  

 public interface IHelloService {  
    public String sayHello(String name);  
    public User  getUser(User user);  
    }  
}

2.创建Service接口的实现类
Java代码 收藏代码

package com.test.service;  
import com.test.service.bean.User;  
public class HelloService implements IHelloService{   
    public String sayHello(String name){  
        return "Hello,"+name;  
    }  
    public User getUser(User user) {  
        User userNew = new User();  
        userNew.setId("new:"+user.getId());  
        userNew.setName("new:"+user.getName());  
        return userNew;  
    }  
}

Java代码 收藏代码

package com.test.service.bean;  
public class User {       
    private String id;  
    private String name;      
    public String getId() {  
        return id;  
    }  
    public void setId(String id) {  
        this.id = id;  
    }  
    public String getName() {  
        return name;  
    }  
    public void setName(String name) {  
        this.name = name;  
    }  
}

3.在web.xml文件中进行XFire拦截配置,可参照官网提供的sample。
Xml代码 收藏代码

<?xml version="1.0" encoding="UTF-8"?>  
<web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee"  
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
   xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee   
   http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">  

<servlet>  
    <servlet-name>XFireServlet</servlet-name>  
    <servlet-class>  
        org.codehaus.xfire.transport.http.XFireConfigurableServlet  
    </servlet-class>  
</servlet>  
<servlet-mapping>  
    <servlet-name>XFireServlet</servlet-name>  
    <url-pattern>/servlet/XFireServlet/*</url-pattern>  
</servlet-mapping>  
<servlet-mapping>  
    <servlet-name>XFireServlet</servlet-name>  
    <url-pattern>/services/*</url-pattern>  
</servlet-mapping>  
</web-app>

4.在class目录下建立META-INF目录,如(META-INF>xifre->services.xml),
在services.xml文件中进行webservice服务的发布,可参照官网提供的sample。
Xml代码 收藏代码

<?xml version="1.0" encoding="UTF-8"?>  
<beans xmlns="http://xfire.codehaus.org/config/1.0">  
<service>  
    <name>HelloService</name>  
    <serviceClass>com.test.service.IHelloService</serviceClass>  
    <implementationClass>com.test.service.HelloService</implementationClass>  
</service>      
</beans>

5.将xfire的Jar包和相关依赖包拷到系统应用中,在Tomcat下部署应用。
启动tomcat后访问服务(需在应用后加上/services,webservice才会进行拦截):
例:http://localhost:8080/ws2/services。(IE下有时无法显示列表,可用其它浏览器显示或指定接口名称)
界面如下:

点击后查看详细的wsdl文档,不同的浏览器下访问会有区别,展示效果不一致。

二.建立XFire客户端进行调用

1.本地客户端调用,与webservice服务在同一应用。

Java代码 收藏代码

package com.test.client;  

import java.net.MalformedURLException;  
import org.codehaus.xfire.XFireFactory;  
import org.codehaus.xfire.client.XFireProxyFactory;  
import org.codehaus.xfire.service.Service;  
import org.codehaus.xfire.service.binding.ObjectServiceFactory;  
import com.test.service.IHelloService;  
import com.test.service.bean.User;  

public class ClientTest {  
    public static void main(String args[]) throws MalformedURLException {  
        Service service = new ObjectServiceFactory().create(IHelloService.class);  
        XFireProxyFactory factory = new XFireProxyFactory(XFireFactory  
                .newInstance().getXFire());  
        String url = "http://localhost:8080/ws2/services/HelloService";  
        IHelloService helloService = (IHelloService) factory.create(service,url);  
        System.out.println(helloService.sayHello("张三"));  
        User user = new User();  
        user.setName("张三");  
        System.out.println(helloService.getUser(user).getName());  
    }  
}  


 执行结果如下:

Java代码 收藏代码

Hello,张三  
new:张三
  1. 利用XFire创建build.xml文件生成客户端代码调用webservice服务

    2.1在src目录下创建build.properties文件,配置如下:
    Java代码 收藏代码

    src.dir=${basedir}
    lib.dir=D:/myspace/ws2/WebRoot/WEB-INF/lib
    wsdl.dir=http://localhost:8080/ws2/services/HelloService?wsdl

    2.2在src目录下创建build.xml文件,配置如下:
    Xml代码 收藏代码

Axis2

Apache Wink

resteasy

dubbo

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读