`
javaEEdevelop
  • 浏览: 876138 次
  • 性别: Icon_minigender_1
  • 来自: 广州
文章分类
社区版块
存档分类
最新评论

CXF整合Spring之JaxWsProxyFactoryBean调用

 
阅读更多

 

1.见解

1.1 客户端的接口代码还一定要和服务端的接口代码一样,连注解都要一样,不够灵活

1.2 当客户端访问服务器的请求地址时,如果服务端没有对应的地址,就会报错,但是又没有cxf的异常捕获处理

1.3 address中的url是模糊匹配的

//服务端代码

2.UserBean.java

 

package cn.hk.bean;

public class UserBean {
	private int id;
	private String userName;
	private String password;
	public UserBean(){
		
		
	}
	public UserBean(int id, String userName, String password) {
		super();
		this.id = id;
		this.userName = userName;
		this.password = password;
	}
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public String getUserName() {
		return userName;
	}
	public void setUserName(String userName) {
		this.userName = userName;
	}
	public String getPassword() {
		return password;
	}
	public void setPassword(String password) {
		this.password = password;
	}
	@Override
	public String toString() {
		return "UserBean [id=" + id + ", password=" + password + ", userName="
				+ userName + "]";
	}
	
	
}

 

 3.IUserDao.java

 

package cn.hk.dao;

import java.util.List;

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

import cn.hk.bean.UserBean;

@WebService
public interface IUserDao {

	public UserBean getUser(@WebParam(name="id") int id);
	public String getUserName(int id);
	public List<UserBean> getUserList();
}

 

4.IUserDaoImpl.java

package cn.hk.dao.impl;

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

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

import cn.hk.bean.UserBean;
import cn.hk.dao.IUserDao;
@WebService
public class IUserDaoImpl implements IUserDao {

	@Override
	public UserBean getUser(@WebParam(name="id") int id) {
		
		 
		return new UserBean(id,"zhangsan","zhangsan");
	}

	@Override
	public List<UserBean> getUserList() {
		List<UserBean> list=new ArrayList<UserBean>();
		UserBean u1=new UserBean(1,"lisi","lisi");
		list.add(u1);
		u1=new UserBean(2,"wanwu","wanwu");
		list.add(u1);
		u1=new UserBean(3,"tiantian","tiantian");
		list.add(u1);
		return list;
	}

	@Override
	public String getUserName(int id) {
		
		return "id:"+id+"name:zhangsan";
	}

} 

  5.applicationContext.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:aop="http://www.springframework.org/schema/aop"
	xmlns:tx="http://www.springframework.org/schema/tx"
	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://www.springframework.org/schema/tx 
  	http://www.springframework.org/schema/tx/spring-tx.xsd 
	http://www.springframework.org/schema/aop 
  	http://www.springframework.org/schema/aop/spring-aop.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-servlet.xml"/>
    <import resource="classpath:META-INF/cxf/cxf-extension-soap.xml"/>
    <import resource="classpath:META-INF/cxf/cxf-extension-javascript-client.xml"/>              	
  	
	 
	<bean id="userDaoService" class="cn.hk.dao.impl.IUserDaoImpl"></bean>

	<bean id="customInFaultInterceptor" class="cn.hk.interceptor.CustomInFaultInterceptor">
		<constructor-arg value="send"/>
	</bean>
	<jaxws:server address="/users" serviceClass="cn.hk.dao.impl.IUserDaoImpl" id="userService"   >
			<jaxws:serviceBean >
				<ref bean="userDaoService"/>
			</jaxws:serviceBean>
			<jaxws:inInterceptors>
				<ref bean="customInFaultInterceptor"/>
			</jaxws:inInterceptors>
			<jaxws:inFaultInterceptors>
				<ref bean="customInFaultInterceptor"/>
			</jaxws:inFaultInterceptors>
			<jaxws:outInterceptors>
				<ref bean="customInFaultInterceptor"/>
			</jaxws:outInterceptors>
			<jaxws:outFaultInterceptors>
				<ref bean="customInFaultInterceptor"/>
			</jaxws:outFaultInterceptors>
			
	</jaxws:server>
	
</beans>

 6.web.xml

 

<?xml version="1.0" encoding="UTF-8"?>
<web-app id="WebApp_ID" 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">
	<context-param>
		<param-name>contextConfigLocation</param-name>
		<param-value>classpath:applicationContext.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>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>CXFServlet</servlet-name>
        <url-pattern>/services/*</url-pattern>
    </servlet-mapping>
	<display-name>cxfISpring</display-name>
	<welcome-file-list>
		<welcome-file>index.jsp</welcome-file>		
	</welcome-file-list>
</web-app>

 

 7.CustomInFaultInterceptor.java

 

package cn.hk.interceptor;


import org.apache.cxf.message.Message;
import org.apache.cxf.phase.AbstractPhaseInterceptor;

public class CustomInFaultInterceptor extends AbstractPhaseInterceptor<Message> {

	public CustomInFaultInterceptor(String phase){
		
		super(phase);
	}
	@Override
	public void handleMessage(Message message)  {
		
		System.out.println("getInMessage------------------"+message.getExchange().getInMessage());
		System.out.println("getInFaultMessage------------------"+message.getExchange().getInFaultMessage());
		System.out.println("getOutMessage------------------"+message.getExchange().getOutMessage());
		System.out.println("getOutFaultMessage------------------"+message.getExchange().getOutFaultMessage());
	}

}

 //客户端代码

1.UserBean.java

 

package cn.hk.bean;

public class UserBean {
	private int id;
	private String userName;
	private String password;
	public UserBean(){
		
		
	}
	public UserBean(int id, String userName, String password) {
		super();
		this.id = id;
		this.userName = userName;
		this.password = password;
	}
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public String getUserName() {
		return userName;
	}
	public void setUserName(String userName) {
		this.userName = userName;
	}
	public String getPassword() {
		return password;
	}
	public void setPassword(String password) {
		this.password = password;
	}
	@Override
	public String toString() {
		return "UserBean [id=" + id + ", password=" + password + ", userName="
				+ userName + "]";
	}
	
	
}

 2.IUserDao.java

 

package cn.hk.dao;

import java.util.List;

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


import cn.hk.bean.UserBean;
@WebService
public interface IUserDao {

	public UserBean getUser(@WebParam(name="id") String  id);
	public String getUserName(String id);
	public List<UserBean> getUserList();
}

 3.InvokeUsersServices.java 调用

 

package cn.webservice.client;

import org.apache.cxf.jaxws.JaxWsProxyFactoryBean;

import cn.hk.dao.IUserDao;

public class InvokeUsersServices {
	
	public static void main(String[] args) {
		
		JaxWsProxyFactoryBean factory=new JaxWsProxyFactoryBean();
		factory.setServiceClass(IUserDao.class);
		
		factory.setAddress("http://localhost:8085/cxfISprint/services/userss");
		IUserDao userDao=(IUserDao)factory.create();
		System.out.println(userDao.getUser("1"));
		System.out.println(userDao.getUserName("12"));
		System.out.println(userDao.getUserList().size());
	}
}
 

 

CXF整合Spring之JaxWsProxyFactoryBean调用异常

1.

Exception in thread "main" java.lang.ClassCastException: org.apache.cxf.endpoint.ClientImpl cannot be cast to cn.hk.dao.IUserDao

at cn.webservice.client.InvokeUsersServices.main(InvokeUsersServices.java:13)


cause 是JaxWsProxyFactoryBean对象,不是JaxWsClientFactoryBean对象

2.

Exception in thread "main" javax.xml.ws.WebServiceException: Could not find wsdl:binding operation info for web method getUserName.

at org.apache.cxf.jaxws.JaxWsClientProxy.invoke(JaxWsClientProxy.java:113)

at $Proxy17.getUserName(Unknown Source)

at cn.webservice.client.InvokeUsersServices.main(InvokeUsersServices.java:14)


cause 客户端的接口也庶加@WebService注解

3.

object is not an instance of declaring class while invoking public java.lang.String cn.hk.dao.impl.IUserDaoImpl.getUserName(int) with params [10].

... 2 more

cause jaxws:serviceBean一定要引用接口的实现类

//需要的依赖jar


分享到:
评论
1 楼 Juveniless 2016-03-29  
谢谢分享 

相关推荐

    Springboot整合CXF发布Web service和客户端调用(用户和密码验证)

    总结起来,Spring Boot整合CXF发布Web服务和实现用户密码验证的客户端调用主要包括以下步骤: 1. 引入CXF和Spring Security依赖。 2. 定义并实现Web服务接口。 3. 配置Spring Security以实现认证。 4. 使用CXF生成...

    CXF 整合 Spring 搭建Web Service

    - **客户端调用**:Spring可以帮助创建CXF的客户端代理,通过`JaxWsProxyFactoryBean`创建服务代理,方便调用Web服务。 4. **使用CXF的Spring支持**: - `cxf-servlet.xml`配置:在Spring配置文件中,设置CXF的...

    springboot整合CXF发布webservice和客户端调用

    - 社区论坛:Stack Overflow和其他技术社区有很多关于SpringBoot+CXF整合的问题和解答,可以作为参考。 6. **调试与测试** - 使用`mvnw`或`mvnw.cmd`可以运行Maven命令,例如`mvn spring-boot:run`启动应用。 - ...

    CXF与Spring整合以及所需jar

    -- Spring与CXF整合库 --&gt; &lt;groupId&gt;org.apache.cxf &lt;artifactId&gt;cxf-spring-boot-starter-jaxws &lt;version&gt;3.x.x &lt;!-- 或者手动引入Spring整合所需的CXF模块 --&gt; &lt;groupId&gt;org.apache.cxf &lt;artifactId&gt;...

    CXF源码:CXF_Spring源码

    1. **CXF与Spring的整合** Spring框架以其强大的依赖注入(DI)和面向切面编程(AOP)能力而闻名,而CXF作为Web服务框架,能够利用Spring的这些特性。通过Spring配置,我们可以轻松地声明CXF服务端点,并且利用...

    cxf+spring3.1整合demo

    【标题】"cxf+spring3.1整合demo"是一个示例项目,它演示了如何将Apache CXF服务框架与Spring 3.1版本进行集成。Apache CXF是一个开源的Web服务框架,它允许开发人员创建和消费各种类型的Web服务,而Spring是一个...

    spring整合cxf

    本文将深入探讨如何将Spring与CXF整合,以实现高效、灵活的Web服务开发。 首先,让我们了解Spring和CXF的基本概念。Spring框架以其依赖注入(Dependency Injection,DI)和面向切面编程(Aspect-Oriented ...

    12.CXF与Spring整合为JavaEE应用发布WebService

    5. **Spring配置CXF**:在Spring配置文件中,可以通过定义CXF的bean来设置服务提供者和服务消费者,如`JaxWsServerFactoryBean`用于服务发布,`JaxWsProxyFactoryBean`用于服务调用。 6. **RESTful Web服务**:CXF...

    cxf+spring 无包

    "cxf+spring"表明我们将讨论的是这两者的整合。"soa"代表Service-Oriented Architecture(面向服务架构),这是一种设计软件系统的方法,其中服务是独立的、可重用的组件,可以通过网络进行通信。 在【压缩包子文件...

    CXF-Spring-Client-J.zip

    首先,我们需要理解Spring和CXF的整合是如何工作的。Spring通过其ApplicationContext容器管理CXF客户端的所有配置,使得服务调用变得更加简洁和灵活。CXF客户端的配置通常包含两部分:服务接口定义和服务代理创建。 ...

    CXF结合Spring开发WebServices示例工程

    这个示例工程可以帮助初学者理解CXF和Spring的整合过程。 ### 7. 学习资源与实践 为了更好地理解和应用这个示例工程,建议查阅以下资源: - CXF官方文档:详细介绍了CXF的使用方法和最佳实践。 - Spring官方文档:...

    CXF_WebService整合Spring

    【CXF WebService 整合 Spring】整合 CXF WebService 与 Spring 框架能够带来许多优势,例如更好的服务管理、依赖注入以及利用 Spring 的事务处理能力等。以下是整合过程中涉及的关键步骤和知识点: 1. **所需 jar ...

    apahe cxf 与spring 开发例子1

    5. **客户端调用**:在客户端,可以使用CXF的`JAXWSProxyFactoryBean`创建服务代理,进行Web服务调用。同样,这个过程也可以在Spring中进行配置。 在"scdemo1"这个例子中,可能包含了这样的整合过程,但具体实现...

    springBoot完整整合WebService框架CXF示例

    SpringBoot与CXF整合是构建基于Web服务的应用程序的一个常见实践。CXF是一个开源的Java框架,用于构建和开发服务导向架构(SOA)应用程序,它支持SOAP和RESTful服务。SpringBoot则简化了Spring应用的初始化和配置,...

    webservice客户端,整合spring

    整合Spring Security和CXF,可以实现对Web Service调用的安全控制,如身份验证、授权、加密等。 10. **监控和日志**: 可以利用Spring的Actuator或CXF自身的监控功能,对Web Service客户端的调用情况进行监控和...

    cxf和springnvc整合

    1. **配置 CXF 容器**:在 Spring 配置文件中,我们需要声明一个 CXF 容器,通常是 `JaxWsProxyFactoryBean` 或 `JaxWsServerFactoryBean`,用于创建客户端或服务端的 Web 服务。例如,对于服务端,我们可以这样配置...

    web service cxf 2.7.5 与spring 3.0 集成

    使用Spring的JAX-WS客户端代理工厂(JaxWsProxyFactoryBean)可以轻松创建并调用CXF服务。只需设置服务地址和接口,工厂将自动生成代理对象供客户端使用。 总的来说,将CXF 2.7.5与Spring 3.0集成,可以充分利用...

    spring3.0整合cxf3.1.4所需的最小jar包

    整合Spring和CXF的步骤通常包括以下部分: 1. 添加依赖:在项目中引入必要的jar包。标题中提到的"spring3.0整合cxf3.1.4所需的最小jar包"应该包含以下关键组件: - spring-context:Spring的核心模块,提供DI和AOP...

    spring 3.0.5 集成cxf

    "spring 3.0.5 集成cxf"这一主题聚焦于如何将Spring 3.0.5版本与Apache CXF整合,以实现高效、灵活的服务治理。 Spring 3.0.5是Spring框架的一个稳定版本,它引入了许多增强功能和改进,包括更好的类型安全依赖注入...

Global site tag (gtag.js) - Google Analytics