spring boot 集成WebService Cxf简单实例(soap)

这里是一个简单的例子

服务端pom文件如下
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>cxf</groupId>
  <artifactId>cxf</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <parent>
	<groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
	<version>1.5.9.RELEASE</version>
  </parent>
  <properties>
        <java.version>1.8</java.version>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  </properties>
  <dependencies>
	<dependency>
    	<groupId>org.apache.cxf</groupId>
    	<artifactId>cxf-spring-boot-starter-jaxws</artifactId>
    	<version>3.1.12</version>
	</dependency>
  </dependencies>
</project>

这里只依赖可一个Cxf组件,服务端配置类如下:

@Configuration
public class TestConfig {
        //这里有默认值,如果不配置默认是/services/*
	@Bean
	public ServletRegistrationBean dispatcherServlet() {
	    return new ServletRegistrationBean(new CXFServlet(), "/test/*");
	  }
	@Bean(name = Bus.DEFAULT_BUS_ID)
	public SpringBus springBus() {
	    return new SpringBus();
	}
	@Bean
	public CxfService cxfService() {
	return new CxfServiceImpl();
	}
	@Bean
	public Endpoint endpoint() {
	EndpointImpl endpoint = new EndpointImpl(springBus(), cxfService());
	endpoint.publish("/user");
	return endpoint;
	}

}

服务接口类如下

@WebService(targetNamespace="http://cxf.cgj")
public interface CxfService {
    @WebMethod(operationName="sayHello")
    String sayHello(@WebParam(name="User") User user);
}
服务接口实现类如下
@WebService(targetNamespace="http://cxf.cgj",endpointInterface="cgj.cxf.CxfService")
public class CxfServiceImpl implements CxfService {
	@Override
	public String sayHello(User user) {
		return "hello "+ user.toString();
	}

}
这里@WebService注解标明是一个服务类,targetNamespace指发布的命名空间,接口和实现类必须一致要不然会报错,如果不指定默认是当前包路径;endpointInterface指发布的哪个类的方法,这里指定接口的路径,表示对外发布接口中的方法,如果不指定默认发布当前类的所有方法(注意实现类比接口方法多的情况);@WebMethod修饰一个发布的方法,可以改方法名或者排除不发布;
这里传递的是javaBean类型,这里还有一点,必须保证服务端的User与客户端的User在同一包下,不然会报错。

客户端pom与服务端一致,客户端代码如下

public static void main(String[] args) throws Exception {
		JaxWsDynamicClientFactory dcf =JaxWsDynamicClientFactory.newInstance();
		org.apache.cxf.endpoint.Client client =dcf.createClient("http://localhost:8080/test/user?wsdl");
		User user=new User();
		Body body=new Body();
		body.setGender("男");
		user.setBody(body);
		Object[] objects=client.invoke("sayHello",user);
		System.out.println("*****"+objects[0].toString());
	}
输出结果如下

hello User [sysHead=null, body=Body [name=null, gender=男]]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

jackson陈

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

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

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

打赏作者

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

抵扣说明:

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

余额充值