java cxf webservice 生成客户端 调用 服务端

 我的项目环境:eclipse 、SSH框架

最近在学习webserivce在java的使用,做了一个小例子。

1、我的项目结构

     

java cxf webservice 生成客户端 调用 服务端 - 比目鱼 - 比目鱼的博客
项目名:InterfaceContorlAPP
src下面,主要有config、dao、service、webapp 、applicationContext.xml 及资源文件等。
2、包
我在在现有项目中进行开发和调试,CXF用到的包在apache-cxf-2.6.1.gz 中都有。我大概根据项目中现有的包分析了一下,至少 要有: 
 
java cxf webservice 生成客户端 调用 服务端 - 比目鱼 - 比目鱼的博客
 
java cxf webservice 生成客户端 调用 服务端 - 比目鱼 - 比目鱼的博客
 
java cxf webservice 生成客户端 调用 服务端 - 比目鱼 - 比目鱼的博客
 
 
 
 
 
 以上也是我项目中用到的全部包。
 
2、新增WebService接口和实现类
     在service 包下新建webservice包,主要区别与其他文件。
     接口里面定义了两个方法 ,我都和数据库、表有关系,大家在测试时,可以写的简单些,
    如:在方法 里只写一句打印之类。
     接口名:DemoForWebService
     源码:
package service.webservice;
import javax.jws.WebMethod;
import javax.jws.WebParam;
import javax.jws.WebResult;
import javax.jws.WebService;
import javax.jws.soap.SOAPBinding;
import dao.code.model.User;
//ZBY 20130319
@WebService(targetNamespace = " http://webservice.service")
@SOAPBinding   
public interface DemoForWebService {
 @WebResult(name = "Message_Return",targetNamespace = " http://webservice.service", partName = "Message_Return")
 @WebMethod(operationName = "getUserById", action = " http://sap.com/xi/WebService/soap1.1")
 //示例
    public User getUserById(@WebParam(name = "xtczdm") String xtczdm) throws Exception;
 public String updateUserByCmd(User user) throws Exception;
}

实现类继续上面的接口:DemoForWebServiceImpl
源码:
package service.webservice.impl;
import javax.jws.WebService;
import javax.sql.DataSource;
import dao.code.model.User;
import service.code.UserService;
import service.webservice.DemoForWebService;
/** 
 * @author 作者 ZBY E-mail:  zby@topcase.com.cn
 * @version 创建时间:2013-3-13 上午09:57:46 
 * 类说明 
 */
@WebService(endpointInterface = "service.webservice.DemoForWebService",targetNamespace=" http://webservice.service/",portName="HTTP_Port")
public class DemoForWebServiceImpl implements DemoForWebService {
 private DataSource dataSource;//数据源
    private UserService userService;//我用到的对象对应的serivce,主要用于下面对数据库的访问
 public User getUserById(String xtczdm) throws Exception {
  // TODO Auto-generated method stub
  User user = userService.findUserByXtczdm(xtczdm);
  return user;
 }
 public String updateUserByCmd(User user) throws Exception {
  // TODO Auto-generated method stub
  String result = "True";
  String xtczdm = user.getXtczdm();
  User u = userService.findUserByXtczdm(xtczdm);
  
        if(u!=null){
         u.setXtczkl(user.getXtczkl());
      userService.persistUser(u);
         result = u.getXtczkl();
        }else{
         result ="false";
        }
  return result;
 }
 public DataSource getDataSource() {
  return dataSource;
 }
 public void setDataSource(DataSource dataSource) {
  this.dataSource = dataSource;
 }
 public UserService getUserService() {
  return userService;
 }
 public void setUserService(UserService userService) {
  this.userService = userService;
 }

}
3、配置文件
     (1)我在 config包下单独建了一个webservice的配置文件,beanRef-service-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:context="http://www.springframework.org/schema/context"
  xmlns:tx="http://www.springframework.org/schema/tx"
  xmlns:dwr="http://www.directwebremoting.org/schema/spring-dwr"
  xmlns:jaxws="http://cxf.apache.org/jaxws"
  xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans-2.5.xsd
  http://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context-2.5.xsd
  http://www.springframework.org/schema/txhttp://www.springframework.org/schema/tx/spring-tx-2.5.xsd
  http://www.directwebremoting.org/schema/spring-dwr
     http://www.directwebremoting.org/schema/spring-dwr-3.0.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" />

 
 <context:annotation-config />   
   <!-- 为刚建的接口 配置spring配置文件 bean id = 接口名的首字母缩写,这是我们公司规范,呵呵。

           请注意的时,这个ID 将是下面配置webserivce endpoint 中implementor 要引用的值。

  -->
  <bean id="demoForWebService" parent="baseTransactionProxy">
  <property name="proxyTargetClass" value="true" />
  <property name="target">
   <bean class="service.webservice.impl.DemoForWebServiceImpl">  
    <property name="dataSource" ref="dataSource"/><!-- 对比这两个属性,和实现类中引用的两个对象是一样的。spring配置大家还是根据自己的规范来-->
    <property name="userService" ref="UserService"/> 
   </bean>
  </property>
 </bean>
 <!-- 

 <jaxws:endpoint id="demoForWebSerivceWebSerivce" implementor="service.webservice.impl.DemoForWebSerivceImpl" address="/demoForWebSerivce" />
 -->
 <jaxws:endpoint id="demoForWebServiceWebService" implementor="#demoForWebService" address="/demoForWebService" />
 <!-- implementor = 接口bean 的id

        address  = url访问时的路径      

-->
 
</beans>

(2)要把(1)生成的文件,加入到applicationContext.xml,这主要是Spring的要求

<import resource="config/beanRef-service-webservice.xml" />

(3)在你的web.xml文件中增加如下内容:

<servlet>   
        <servlet-name>CXFServlet</servlet-name>   
        <servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class>   
        <load-on-startup>1</load-on-startup>   
    </servlet>   
     <servlet-mapping>   
        <servlet-name>CXFServlet</servlet-name>   
        <url-pattern>/webservice/*</url-pattern>   
    </servlet-mapping>

红色部分在后面的URL中要用到。

4、测试是否配置成功

     启动项目后,使用url访问。

     这是我的访问URL:http://127.0.0.1:8080/InterfaceControlApp/webservice/demoForWebService?wsdl

解析:

     http://IP:端口号/项目访问名/web中配置url-pattern/beanRef-service-webservice.xml配置的address?wsdl

成功后:

java cxf webservice 生成客户端 调用 服务端 - 比目鱼 - 比目鱼的博客

 

 5、客户端调用

     我主要是通过写main调用

      方法一:使用cxf 写客户端调用

     在common包下新增clientWS.java

源码:

      package common;

import java.beans.PropertyDescriptor;
import java.net.URL;
import java.util.List;

import javax.xml.namespace.QName;

import org.apache.cxf.binding.corba.wsdl.ObjectFactory;
import org.apache.cxf.endpoint.Client;
import org.apache.cxf.endpoint.Endpoint;
import org.apache.cxf.jaxws.JaxWsProxyFactoryBean;
import org.apache.cxf.jaxws.endpoint.dynamic.JaxWsDynamicClientFactory;
import org.apache.cxf.service.Service;
import org.apache.cxf.service.model.BindingInfo;
import org.apache.cxf.service.model.BindingMessageInfo;
import org.apache.cxf.service.model.BindingOperationInfo;
import org.apache.cxf.service.model.MessagePartInfo;
import org.apache.cxf.service.model.ServiceInfo;

import dao.code.model.User;

import service.webservice.DemoForWebService;
import service.webservice.impl.DemoForWebServiceImpl;  

 

/** 
 * @author 作者 E-mail: 
 * @version 创建时间:2013-3-19 下午01:46:47 
 * 类说明  http://127.0.0.1:8080/InterfaceControlApp/webservice/demoForWebService?wsdl
 */

public class clientWS {
       public static void main(String args[]) throws Exception {   
     
    
      /*  
       * 方法三*/
        JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean(); 
        // 注册WebService接口  
        factory.setServiceClass(DemoForWebService.class); 
        // 设置WebService地址  
        factory.setAddress("http://127.0.0.1:8080/InterfaceControlApp/webservice/demoForWebService");  
        DemoForWebService dfw = (DemoForWebService) factory.create(); 
        System.out.println("invoke webservice...");  
        String xtczdm ="admin";
        //根据操作代码得到用户
    User user = dfw.getUserById(xtczdm);
        if(user != null){
     WebLogs.getLogger().info("user is not null!");
     //修改用户密码
     user.setXtczkl("test");
     String result = dfw.updateUserByCmd(user);
     WebLogs.getLogger().info("新密码:"+result);
    }else{
     WebLogs.getLogger().info("NULL !");
    }
                           
      }  


}
运行成功后:

java cxf webservice 生成客户端 调用 服务端 - 比目鱼 - 比目鱼的博客

 方法二:使用wsdl2java生成客户端

1、需要 一个包:apache-cxf-2.6.1.gz

这个包里有好多jar包,一定要下载下来。

将此包解压,我是放在:E:\CXF\apache-cxf-2.6.1

   

java cxf webservice 生成客户端 调用 服务端 - 比目鱼 - 比目鱼的博客
2、将URL调用成功的页面内容,另存为XML
    
java cxf webservice 生成客户端 调用 服务端 - 比目鱼 - 比目鱼的博客
 3、在cmd中通过wsdl2java生成客户端文件
java cxf webservice 生成客户端 调用 服务端 - 比目鱼 - 比目鱼的博客
cd 进入apache-cxd-2.6.1\bin目录
执行命名:
wsdl2java -p service.webservice.client.demo -d F:\MyDocuments\Java\ws\InterfaceControlApp\src -verbose "F:\demoForWebSerivce.xml"
解析
wsdl2java -p 包名 -d 生成文件路径 -verbose "wsdl文件路径"
 然后再拷贝到项目里
包名:文件存放的包名,可以写项目中包路径 
生成文件路径 :文件存放路径,可以直接写项目路径
wsdl文件:在IE中执行服务端URL显示的XML另存为XML文件。
 我是直接到项目路径了,生成前:
java cxf webservice 生成客户端 调用 服务端 - 比目鱼 - 比目鱼的博客
 生成后:
java cxf webservice 生成客户端 调用 服务端 - 比目鱼 - 比目鱼的博客
 报错处理:
java cxf webservice 生成客户端 调用 服务端 - 比目鱼 - 比目鱼的博客
4、写MAIN调用
     package common;

import javax.xml.ws.Service;
import service.webservice.client.demo.DemoForWebService;
import service.webservice.client.demo.DemoForWebServiceImplService;
import service.webservice.client.demo.User;

/** 
 * @author 作者 E-mail: 
 * @version 创建时间:2013-3-20 下午03:39:29 
 * 类说明 
 */
public class TestWSClientByZBY {
 /**
  * @param args
  */
 public static void main(String[] args) {
  // TODO Auto-generated method stub
  Service service = Service.create(DemoForWebServiceImplService.SERVICE);
  
  String endpointAddress = " http://127.0.0.1:8080/InterfaceControlApp/webservice/demoForWebService?wsdl";
  service.addPort(DemoForWebServiceImplService.HTTPPort, javax.xml.ws.soap.SOAPBinding.SOAP11HTTP_BINDING, endpointAddress);
  // DMSSender dms = service.getPort(DMSSender.class);
  DemoForWebService dms = service.getPort(DemoForWebServiceImplService.HTTPPort,DemoForWebService.class);
   User user;
  try {
   user = dms.getUserById("admin");
   System.out.println(user.getXtczdm());
  } catch (Exception e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
 }
}
java cxf webservice 生成客户端 调用 服务端 - 比目鱼 - 比目鱼的博客
在服务端的实现类中@WebService(endpointInterface = "service.webservice.DemoForWebService",targetNamespace=" http://webservice.service/",portName="HTTP_Port")
成功后:
java cxf webservice 生成客户端 调用 服务端 - 比目鱼 - 比目鱼的博客
调用完成。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
调用Java CXF中的Web服务,首先需要定义一个服务接口。在引用中的示例中,定义了一个名为HelloWorld的接口,其中包含一个sayHi方法,用于向Web服务发送参数并返回结果。接口上需要添加@WebService注解。 接下来,需要创建一个服务端实现类来实现接口。在引用的示例中,创建了一个名为UserServiceImpl的服务端实现类,实现了UserService接口,并重写了getUserInfo方法,返回了相应的结果。 然后,在测试类中,可以使用JaxWsServerFactoryBean来发布服务。在引用的示例中,创建了一个名为test的测试类,通过设置相关参数来发布UserService服务。 最后,要进行客户端调用,在客户端代码中,需要创建一个服务对象并设置相关参数。在引用的示例中,创建了一个名为implementor的UserService对象,并设置了服务地址、接口类和实现类。然后通过调用create方法来启动Web服务。 通过以上步骤,就可以使用Java CXF调用Web服务了。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [java利用CXF实现WebService 实例](https://blog.csdn.net/wuyjcsdn/article/details/72869437)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* [使用cxf发布webservice接口,以及调用webservice接口](https://blog.csdn.net/qq_20161461/article/details/116237450)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值