博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Apache CXF客户端代码编写
阅读量:5903 次
发布时间:2019-06-19

本文共 3840 字,大约阅读时间需要 12 分钟。

hot3.png

一,Java Application实现CXF Soap调用

准备

1.我们需要吧client依赖的jar包导入

2.服务端我们按照 https://my.oschina.net/ososchina/blog/337243编写

3.通过wsdl2java 命令生成代码

cmd进入src目录,执行类似如下命令,便可以生成wsdl的stub工具类

wsdl2java -d ./ http://localhost:8080/SpringCFXServer/WebService/helloWorld?wsdl

代码编写

public static void main(String[] args){		       		//System.setProperty("http.proxySet", "true");  		//System.setProperty("http.proxyHost", "127.0.0.1");   //此处代码用于http抓包,和程序无关		//System.setProperty("http.proxyPort", "9898"); 						HelloWorldImplService factory=new HelloWorldImplService();		//此处返回的只是远程Web Service的代理		HelloWorld hw=factory.getHelloWorldImplPort();				/**		 * 添加的拦截器		 */		Client client=ClientProxy.getClient(hw);		//参数为输入的用户名,密码		client.getOutInterceptors().add(new AddHeaderInterceptor("hejingyuan","hjy"));						System.out.println(hw.sayHi("hejingyuan"));				System.out.println("--------------------------");				User user=new User();		user.setId(20);		user.setName("孙悟空");		user.setPass("111");		user.setAddress("花果山");				List
cats=hw.getCatsByUser(user); for(Cat cat:cats){ System.out.println(cat.getName()); } System.out.println("--------------------------"); System.out.println(hw.getAllCats().getEntry().get(0).getKey()); System.out.println(hw.getAllCats().getEntry().get(0).getValue().getName()); }

一,Java Web+Spring实现CXF Soap调用

1.进入src目录使用命令生成CXF Stub

wsdl2java -d ./ http://localhost:8080/SpringCFXServer/WebService/userService?wsdlwsdl2java -d ./ http://localhost:8080/SpringCFXServer/WebService/helloWorld?wsdl

2.配置web.xml

contextConfigLocation
/WEB-INF/applicationContext.xml
org.springframework.web.context.ContextLoaderListener

3.配置applicationContext.xml

可以实现多个服务

jaxws:client 同样会把服务声明成为java对象,我们只需要在特定的Controller中注入即可。

public class ListCatsController{    private HelloWorld helloWorld;            public HelloWorld getHelloWorld() {        return helloWorld;    }    public void setHelloWorld(HelloWorld helloWorld) {        this.helloWorld = helloWorld;    }}

4.AddHeaderInterceptor类的实现

public class AddHeaderInterceptor extends AbstractPhaseInterceptor
{ private String userId; private String userPass; public AddHeaderInterceptor(String userId,String userPass){ super(Phase.PREPARE_SEND);//在准备发送SOAP消息时启用该拦截器 this.userId=userId; this.userPass=userPass; } @Override public void handleMessage(SoapMessage msg) throws Fault { List
headers=msg.getHeaders(); //创建Document对象 Document doc=DOMUtils.createDocument(); Element ele=doc.createElement("authHeader"); //此处创建的元素应该按照服务器那边的要求 Element idEle=doc.createElement("userId"); idEle.setTextContent(userId); Element passEle=doc.createElement("userPass"); passEle.setTextContent(userPass); ele.appendChild(idEle); ele.appendChild(passEle); /** * 上面代码生成了一个如下XML文档片段 *
*
hejingyuan
*
hjy
*
*/ //把ele元素包装成Header,并添加到SOAP消息的Header列表中 //(QName就是一个带有命名空间的节点) headers.add(new Header(new QName("hejingyuan"),ele)); }}

5.restful webservice代码编写

@Path("/rest")public interface MyRestfulService {		@Path("/add/{x}/{y}")	@GET	@Produces({ MediaType.APPLICATION_JSON +";charset=UTF-8"})	public Map
add(@PathParam("x")int i,@PathParam("y")int y); @POST @Path("/sayHi/{msg}") @Produces({MediaType.APPLICATION_JSON +";charset=UTF-8"}) public Map
put(@PathParam("msg")String id); }

 

转载于:https://my.oschina.net/ososchina/blog/854179

你可能感兴趣的文章
路由器设置密码和标语
查看>>
CSS3属性
查看>>
Oracle 字符集的查看和修改【上】
查看>>
JQuery 基础操作
查看>>
linux 脚本之 expect命令使用
查看>>
沃通SSL证书支持ECC算法吗?
查看>>
javassist用法总结
查看>>
求dojo/domReady不能在sync loader下使用的原因
查看>>
好程序员web前端分享CSS3弹性盒
查看>>
游戏UI框架设计(二) : 最简版本设计
查看>>
(转)Python中第三方模块的使用心得
查看>>
08/23 学习总结
查看>>
tomcat注册windows服务
查看>>
使用qq邮箱的smpt服务发送邮件一定要记得用ssl
查看>>
Win7 右下角出现 Test Mode
查看>>
J2EE初窥
查看>>
20个非常有用的Java代码片段
查看>>
sql注入总结
查看>>
如何把一个程序中 Edit 中的文本赋给另一个程序的 Edit ? - 回复 "Disk_" 的问题
查看>>
Android异步处理四:AsyncTask的实现原理
查看>>