1,访问通过cxf发布的服务

(1)与之前一样,同样可以通过在本地通过wsdl文件和命令行生成Java文件来访问服务。

但是我们既然使用了cxf发布,就要通过cxf的工具生成访问。可以通过cxf目录的bin目录下的wsdl2java.bat文件访问服务。

例如:要在d:/a下生成Java类,与之前不同的是,cxf默认生成的Java文件,而wsimport默认生成的是class文件。

没有提示,在d:/a下生成了cn文件目录。

(2)将生成的cn目录拷贝到工程中。

(3)建立一个测试类,TestMain.java

(4)编写TestMain.java

public class TestMain {
public static void main(String[] args) {
HelloWorld helloWorld = new HelloWorldService().getHelloWorldPort();
helloWorld.sayHello();
}
}

运行,访问成功,打印hello cxf!!!

2,另一种调用方式:通过JaxWsProxyFactoryBean类调用,不过我们一般不使用这种方式,因为这种方式要求两边都是cxf,但两边经常不一样,不方便。

这种方式要先在服务器抽取一个接口。

(1)开发服务端:

@WebService
public class HelloWorld implements IHelloWorld {
@Override
public String sayHello() {
System.out.println("hello cxf!!!");
return "11111";
}
public static void main(String[] args) throws InterruptedException {
/**
* 这里为什么使用set方式设置呢,因为cxf要与spring整合,spring的设值注入都是通过set 方法注入的。
*/
//cxf发布形式
JaxWsServerFactoryBean factoryBean = new JaxWsServerFactoryBean();
//设置地址
factoryBean.setAddress("http://192.168.0.104:8989/hello");
//设置具体类
factoryBean.setServiceBean(new HelloWorld());
//设置接口。
factoryBean.setServiceClass(IHelloWorld.class);
//启动
factoryBean.create();
}
}

注意:需要为factorybean设置接口factoryBean.setServiceClass(IHelloWorld.class);

并实现接口,public class HelloWorld implements IHelloWorld。

(2)抽取的接口

@WebService
public interface IHelloWorld {
public abstract String sayHello();
}

(3)开发客户端

public class Client {
public static void main(String[] args) {
JaxWsProxyFactoryBean bean = new JaxWsProxyFactoryBean();
bean.setAddress("http://192.168.0.104:8989/hello?wsdl");
bean.setServiceClass(IHelloWorld.class);
IHelloWorld world = (IHelloWorld) bean.create();
String s = world.sayHello();
System.out.println(s);
}
}

(4)先启动服务端,在启动客户端测试。

3,通过cxf框架使用soap1.2协议。

在接口中,加上注释,在发布服务即可。

@WebService
//绑定为soap1.2,使用soap1.2协议
@BindingType(javax.xml.ws.soap.SOAPBinding.SOAP12HTTP_BINDING)
public interface IHelloWorld {
public abstract String sayHello();
}

在生成的wsdl文档中有如图显示。

注意:soap1.2不可以在web service explorer中测试,MyEclipse只支持1.1,soap1.2无法显示。

Soap1.2的wsdl不可以通过wsimport生成Java文件,能生成一部分,但是不完整,没有主文件类。

4,一开始手机归属地查询的案例中,通过网上的wsdl生成Java代码的时候,产生warning的原因:通过jdk的wsimport命令生成Java文件报告warning:

因为jdk只支持soap1.1,其他都不支持,而这个wsdl中有4中协议版本,soap1.1、soap1.2、Get、Post。它会忽略出soap1.1以外的其他三种。

5,使用网站上的中英文翻译服务的时候,wsimport生成Java文件是全部无法生成,怎么办呢?

将页面另存为a.wsdl。在本地打开下载的文件。

修改error的错误,第19行报错。说有一个引用找不到,s:schema找不到,到19行删掉他即可。这个标记是微软写的,是个假引用,没什么作用,删掉即可。

在105行,报error。删掉即可。

修改完根据这个a.wsdl文件生成Java代码。

就OK了。

6,使用cxf的wsdl2java.bat工具可以生成soap1.2规范的wsdl的Java文件。

7,使用soap1.2的工程无法使用webservice explorer实现请求响应信息拦截,可以通过cxf自带的拦截器拦截信息。

在启动服务之前添加拦截请求和响应的拦截器即可。

这时soap1.2下的访问情况,这时将服务端的soap1.2的注解去掉,变成soap1.1的,在通过客户端访问,也可以访问,说明客户端可以自动根据服务端判定是soap1.1还是soap1.2。

最新文章

  1. PayPal高级工程总监:读完这100篇论文 就能成大数据高手(附论文下载)
  2. nginx自动检测后台服务器健康状态
  3. 浏览器User-agent简史(user-agent)
  4. Web API后端调用接口 (Get,POST,Put,Delete)
  5. iOS 8 TabBar 图片显示真实颜色
  6. 【原】webapp开发中兼容Android4.0以下版本的css hack
  7. DataItem,gridview,repeater数据控件数据绑定
  8. git 简单用
  9. 使用MyBatis链接MySQL
  10. 第2章 数字之魅——寻找最大的K个数
  11. 【UVA 10816】 Travel in Desert (最小瓶颈树+最短路)
  12. Js获取Gridview中Dropdownlist选中状态
  13. 新秀系列C/C++经典问题(四)
  14. java.net.BindException: Cannot assign requested address: bind
  15. 我与 windows kernel 的一段时光
  16. 如何生成添加前缀的顺序DIV
  17. Mysql哪些字段适合建立索引
  18. bzoj3991 lca+dfs序应用+set综合应用
  19. 200. Number of Islands(DFS)
  20. Html body的滚动条禁止与启用

热门文章

  1. epoll使用实例说明
  2. lua wireshark 数据报解析
  3. VC++ 获取windows系统的版本类型
  4. Google Map API v2 步步为营 (二)----- Location
  5. Plain old data structure(POD)
  6. html响应式布局,css响应式布局,响应式布局入门
  7. MVC Ajax 提交是防止SCRF攻击
  8. IE的@cc_on条件编译
  9. c#中var关键字用法
  10. SQL内外左右交叉连接