我使用CXF和WSDL契约方法创建了一个在tomcat容器中运行的SOAP Web服务。 Java代码是使用maven插件“cxf-codegen-plugin”从WSDL生成的。
现在,我想通过将XML数据映射到JSON数据,将Web服务公开为自定义HTTP / JSON Web服务。但是我还没有成功,我将不胜感激任何帮助。
我在CXF的网站上找到了旧文档https://cxf.apache.org/docs/json-support.html(最近也重复了这些文档并在此处未更正https://cwiki.apache.org/confluence/display/CXF20DOC/JSON+Support)。我使用一个小修补程序运行它:sf.setBindingId(HTTPBinding.HTTP_BINDING);
而不是sf.setBindingId(HttpBindingFactory.HTTP_BINDING_ID);
,因为在CXF 3.x版本中HttpBindingFactory不再存在。
该解决方案的第一个问题是它取决于2016年7月发布的最新版本的jettison-json。该项目看起来已经死了。我找不到合适的替代品。我发现StAXON最差:2014年2月最后一次发布 是否有其他库得到很好的维护并且实现了StAX?
第二个问题是该示例使用了一个服务器bean,而我已经有了一个容器。对于SOAP服务,我只使用public static Endpoint publish(String address, Object implementor)
函数
如何同时使用Tomcat容器和JSON / XML转换?
第三个问题是到目前为止我无法发送有效的JSON请求。缺少文档没有帮助。尽管如此,我还是设法发送了一个有效的JSON等效的SOAP头内容。但我无法猜测如何使CXF也读取SOAP体的等价物。 Web服务的Java界面是public Response get(Header header, Body body);
,我不断收到错误:org.apache.cxf.interceptor.Fault: wrong number of arguments while invoking public abstract Response ServicePort.get(Header,Body) with params [Header@88f6973[user=bbcc2545-27ea-43cd-a1fe-c4a194258e0f]].
显然身体缺失。
是否有人知道正确的JSON语法将请求发送到依赖于jettison-json的CXF HTTP / JSON Web服务? (或者在哪里可以找到全面的文档?)