webservice服务端发布和客户端调用(与tomcat共用端口)

1 篇文章 0 订阅
1 篇文章 0 订阅

1.服务端和客户端增加Maven依赖包,如下

        <!-- cxf方式webservice服务 -->
 
        <dependency>
            <groupId>org.apache.cxf</groupId>
            <artifactId>cxf-rt-frontend-jaxws</artifactId>
            <version>3.1.14</version>
        </dependency>
        <dependency>
            <groupId>org.apache.cxf</groupId>
            <artifactId>cxf-rt-frontend-jaxrs</artifactId>
            <version>3.1.14</version>
        </dependency>
        <dependency>
            <groupId>org.apache.cxf</groupId>
            <artifactId>cxf-rt-transports-http</artifactId>
            <version>3.1.14</version>
        </dependency>
        

2、服务端示例

1)编写HelloWorld 接口类 代码如下:

package net.cc.service;
 
import javax.jws.WebParam;
import javax.jws.WebService;
 
/**
 * @author test
 * @create 2013-11-26下午10:21:13
 */
@WebService
public interface HelloWorld {
 
    @WebMethod(operationName="sayHello")
 
    public String sayHello(@WebParam(name = "userName") String userName);
 
}

2)编写HelloWorldImpl实现类 如下:

package net.cc.service;
 
import javax.jws.WebParam;
import javax.jws.WebService;
 
/**
 * @author test
 * @create 2013-11-26下午10:22:53
 */
@WebService(serviceName = "HelloWorld", endpointInterface="net.cc.service.HelloWorld")
public class HelloWorldImpl implements HelloWorld {
 
    @Override
    public String sayHello(@WebParam(name = "userName") String userName) {
        // TODO Auto-generated method stub
        System.out.println("客户端提交信息: " + userName);
        return "say Hello " + userName;
    }
}

3)服务端web.xml添加CXFServlet

<!--cxf的Servlet-->
    <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>/ws/*</url-pattern>
    </servlet-mapping>

4)服务端发布接口

xml方式,新增Spring-webservice.xml,内容如下:

<?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: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">
 
    <!-- 
        ***注意*** 
        手动添加的内容:
        xmlns:jaxws="http://cxf.apache.org/jaxws"
        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="ProjectManager" implementor="net.cc.service.HelloWorldImpl"
        address="/HelloWorld" />
 
</beans>

web项目,可在web.xml在加载Spring-webservice.xml,或者编写监听器加载,如下:

package net.cc.servlet;
 
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
 
import org.springframework.context.support.ClassPathXmlApplicationContext;
 
 
/**
 * @author test
 * @create 2013-11-26下午10:41:53
 */
public class myListener implements ServletContextListener {
 
    @Override
    public void contextDestroyed(ServletContextEvent arg0) {
        // TODO Auto-generated method stub
 
    }
 
    @Override
    public void contextInitialized(ServletContextEvent arg0) {
        // TODO Auto-generated method stub
        System.out.println("启动Tomcat...");
        ClassPathXmlApplicationContext act = new ClassPathXmlApplicationContext(
                "/net/cc/service/spring-beans.xml");
 
    }
 
}

实现 ServletContextListener 目的是为了在Tomcat启动时自动加载

使用 ClassPathXmlApplicationContext 去加载刚才写的Spring-webservice.xml文件

在当前项目中web.xml文件  增加如下代码:

<listener>
  <listener-class>net.cc.servlet.myListener</listener-class>
</listener>

5)tomcat 启动截图

通过访问:http://{IP}:{port}/ws/HelloWorld?wsdl 查看接口是否发布成功。

 

3、客户端调用示例:

1)编写相同的HelloWord接口:

package net.cc.service;
 
import javax.jws.WebParam;
import javax.jws.WebService;
 
/**
 * @author test
 * @create 2013-11-26下午10:21:13
 */
@WebService(name="HelloWorld", targetNamespace="http://service.cc.net")
public interface HelloWorld {
 
    @WebMethod(operationName="sayHello")
 
    @WebResult(name="return", targetNamespace="http://service.cc.net")
 
    public String sayHello(@WebParam(name = "userName") String userName);
 
}

注:targetNamespace可通过http://{IP}:{port}/ws/HelloWorld?wsdl找到,需与发布接口中的targetNamespace一致。

2)调用服务端接口(通过代理工厂方式调用):     

         // 创建代理工厂
        JaxWsProxyFactoryBean factoryBean = new JaxWsProxyFactoryBean();
 
        // 设置代理工厂属性(服务类以及地址)
        factoryBean.setServiceClass(HelloWorld.class);
        factoryBean.setAddress("http://192.168.1.105:7890/HelloWorld");
 
        // 调用
        HelloWorld helloWorld = (HelloWorld) factoryBean.create();
 
       // 可配置请求超时设置
 
      configTimeout(helloWorld);
 
       String result = helloWorld.sayHello("测试");
       System.out.println(result);
    /**
     * 客户端调用请求时超时设置
     * @param service
     */
    public static void configTimeout(Object service) {
        Client proxy = ClientProxy.getClient(service);
        HTTPConduit conduit = (HTTPConduit) proxy.getConduit();
        HTTPClientPolicy policy = new HTTPClientPolicy();
        policy.setConnectionTimeout(8*1000);//8S 请求时间
        policy.setReceiveTimeout(10*1000);//10S 连接时间
        conduit.setClient(policy);
    }

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值