WebService:设置服务器提供SOAP1.2的服务
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发布形式
调用webservice服务
JaxWsServerFactoryBean factoryBean = new  JaxWsServerFactoryBean();
//设置地址
factoryBean.setAddress("192.168.0.104:8989/hello");
//设置具体类
factoryBean.setServiceBean(new HelloWorld());
//设置接⼝。
factoryBean.setServiceClass(IHelloWorld.class);
//启动
}
}
注意:需要为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("192.168.0.104:8989/hello?wsdl");
bean.setServiceClass(IHelloWorld.class);
IHelloWorld world = (IHelloWorld) ate();
String s = world.sayHello();
System.out.println(s);
}
}
(4)先启动服务端,在启动客户端测试。
3,通过cxf框架使⽤soap1.2协议。
在接⼝中,加上注释,在发布服务即可。
@WebService
//绑定为soap1.2,使⽤soap1.2协议
@l.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。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。