cxf WebService设置wsdl中soapAction的值

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

cxf WebService设置wsdl中soapAction的值

用cxf开发一个WebService很简单,只需要下面几步:

1.定义接口

public interface HelloService {

String hello();

}

2.实现

public class HelloServiceImpl implements HelloService {

@Override

public String hello() {

return "hi,my name is gyoung ";

}

}

3.用ServerFactoryBean生成服务

复制代码

public static void main(String[] args) {

HelloServiceImpl helloworldImpl = new HelloServiceImpl();

//cxf发布服务的工厂bean

ServerFactoryBean svrFactory = new ServerFactoryBean();

//设置服务类

svrFactory.setServiceClass(HelloService.class);

//设置服务地址

svrFactory.setAddress("http://localhost:9001/Hello");

//设置服务bean

svrFactory.setServiceBean(helloworldImpl);

svrFactory.create();

}

复制代码

这样,一个简单的HelloWorld服务便生成成功了。

但是,这样生成的服务有一个问题,wsdl中的soapAction属性是空的

复制代码

复制代码

这一段,如果是.net生成的服务,soapAction是有值的

复制代码

复制代码

查看了很久的源码,才发现,设置cxf设置soapAction是在org.apache.cxf.wsdl.service.factory.ReflectionServiceFactoryBean类中

它会去循环遍历serviceConfigurations,调用其getAction方法来获取action的值。但初始的serviceConfigurations只有DefaultServiceConfiguration和SoapBindingServiceConfiguration,这两个类都没有实现其基类AbstractServiceConfiguration中的getAction方法。所以getAction返回值是空,所以wsdl中的soapAction值也会是空。找到问题就好办了,我们在serviceConfigurations 中增加一个config,在AbstractServiceConfiguration的众多子类中,我发现MethodNameSoapActionServiceConfiguration有继承getAction方法,所以我们只需要在生成服务的时候,增加一个MethodNameSoapActionServiceConfiguration

配置就行了。

复制代码

public static void main(String[] args) {

HelloServiceImpl helloworldImpl = new HelloServiceImpl();

//cxf发布服务的工厂bean

ServerFactoryBean svrFactory = new ServerFactoryBean();

svrFactory.getServiceFactory().getConfigurations().add(new MethodNameSoapActionServiceConfiguration());

//设置服务类

svrFactory.setServiceClass(HelloService.class);

相关文档
最新文档