java - CXF 生成的客户端不包含 SOAP 标头
问题描述
使用在 Apache CXF 发行版中部署的示例 wsdl
我在 pom.xml 中使用此(cxf-codegen-plugin)代码生成设置配置了一个小型 Maven 项目:
...
<plugins>
<plugin>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-codegen-plugin</artifactId>
<version>3.3.6</version>
<executions>
<execution>
<id>generate-sources-x</id>
<phase>generate-sources</phase>
<configuration>
<wsdlRoot>${basedir}/src/main/resources/wsdl</wsdlRoot>
<includes>
<include>hello_world.wsdl</include>
</includes>
<defaultOptions>
<extraargs>
<extraarg>-verbose</extraarg>
<extraarg>-p</extraarg>
<extraarg>my.test.package</extraarg>
<extraarg>-exsh</extraarg>
<extraarg>true</extraarg>
</extraargs>
</defaultOptions>
</configuration>
<goals>
<goal>wsdl2java</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
...
这是我的单元测试:
public class Test3 {
public static void main(String[] args) throws JAXBException {
System.setProperty("com.sun.xml.ws.transport.http.client.HttpTransportPipe.dump", "true");
System.setProperty("com.sun.xml.internal.ws.transport.http.client.HttpTransportPipe.dump", "true");
System.setProperty("com.sun.xml.ws.transport.http.HttpAdapter.dump", "true");
System.setProperty("com.sun.xml.internal.ws.transport.http.HttpAdapter.dump", "true");
String url = "http://www.mmm.xxx/yyy/zzz";
SOAPService service = new SOAPService();
Greeter client = service.getSoapPort();
BindingProvider bp = (BindingProvider) client;
bp.getRequestContext().put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY, url);
List<Header> headers = new ArrayList<Header>();
Header dummyHeader = new Header(new QName("uri:org.apache.cxf", "dummy"), "decapitated", new JAXBDataBinding(String.class));
headers.add(dummyHeader);
bp.getRequestContext().put(Header.HEADER_LIST, headers);
String response = client.greetMe("CIAO!");
}
}
现在,运行测试类,这是 http 请求转储:
---[HTTP request - http://www.mmm.xxx/yyy/zzz]---
Accept: text/xml, multipart/related
Content-Type: text/xml; charset=utf-8
SOAPAction: ""
User-Agent: JAX-WS RI 2.2.9-b130926.1035 svn-revision#5f6196f2b90e9460065a4c2f4e30e065b245e51e
<?xml version='1.0' encoding='UTF-8'?><S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/"><S:Body><greetMe xmlns="http://apache.org/hello_world_soap_http/types"><requestType>CIAO!</requestType></greetMe></S:Body></S:Envelope>--------------------
<S:Header>...</S:Header>
SOAP 信封消息中不显示任何部分。我仔细遵循了此设置的 CXF 文档(http://cxf.apache.org/faq.html#FAQ-HowcanIaddsoapheaderstotherequest/response?)。
我的实施有什么问题?
解决方案
推荐阅读
- ios - 在 iOS 上使用 Swift 从 Firebase Firestore 获取随机文档时出现问题
- java - 为什么数组中的元素总是零?
- excel - 在excel中引用不同工作表中的一行
- assertj - 当顶级值是地图时,AssertJ usingRecursiveComparison 失败
- javascript - 在特定时间刷新页面
- electron - 如何为电子 webview 加载开发工具扩展
- tinymce - tinymce 4 的 Asciisvg 插件
- javascript - SPA 反应应用程序从组件库中动态获取组件
- performance - Jenkins 关于内存的性能问题
- python - 为什么 Tkinter 无法识别该属性?