CXF & Camel:不支持 List<Object> 作为 Web 服务参数
Posted
技术标签:
【中文标题】CXF & Camel:不支持 List<Object> 作为 Web 服务参数【英文标题】:CXF & Camel : does not support List<Object> as web service parameter 【发布时间】:2018-11-04 21:30:00 【问题描述】:我正在使用 JBoss Fuse 6.3 开发使用 Camel 和 CXF 组件 (2.17.0) 的 Web 服务。我也使用“代码优先”的方法。我发现使用一个简单的对象作为参数(doSomething 方法)很顺利,但无法使用对象列表作为参数(更新方法)。以下是调查结果:
@WebService
public java.util.List<ObjectResponse> update(
java.util.List<ObjectRequest> arg0
);
public ObjectResponse doSomething(
Object parameter
);
当arg0只包含一个元素(ObjectRequest)时,它不会抛出错误,但是web服务请求没有内容: 当 arg0 有两个元素时,它会抛出以下错误: java.lang.IllegalArgumentException: Get wrong parameter size to invoke out service, Expect size 1, Parameter size 2. 请检查消息体是否匹配CXFEndpoint POJO Dataformat请求。
在 org.apache.camel.component.cxf.CxfProducer.checkParameterSize(CxfProducer.java:272)[241:org.apache.camel.camel-cxf:2.17.0.redhat-630187]
在 org.apache.camel.component.cxf.CxfProducer.getParams(CxfProducer.java:310)[241:org.apache.camel.camel-cxf:2.17.0.redhat-630187]
在 org.apache.camel.component.cxf.CxfProducer.process(CxfProducer.java:120)[241:org.apache.camel.camel-cxf:2.17.0.redhat-630187]
在 org.apache.camel.processor.SendProcessor.process(SendProcessor.java:145)[232:org.apache.camel.camel-core:2.17.0.redhat-630187] address="http://...."
endpointName="ws:MyServicePort" id="MyService"
loggingFeatureEnabled="true"
serviceClass="com...MyService"
<cxf:properties>;
<entry key="dataFormat" value="POJO"/>
</cxf:properties>
</cxf:cxfEndpoint>
【问题讨论】:
标题应该是:CXF & Camel : 不支持 List 【参考方案1】:解决方法是在设置交换体时,将List包裹在一个对象数组中,如下所示
java.util.List arg0 = new ArrayList();
ObjectRequest obj1;//需要初始化
ObjectRequest obj2;//需要初始化
arg0.add(obj1);
arg0.add(obj2);
exchange.getIn().setBody(new Object[] arg0);
【讨论】:
以上是关于CXF & Camel:不支持 List<Object> 作为 Web 服务参数的主要内容,如果未能解决你的问题,请参考以下文章
为什么Aries Blueprint没有为camel-cxf和camel-blueprint注册名称空间处理程序?
在camel cxf客户端请求中的Http头Content-Length
将 Camel CXF 代理部署到 Red Hat JBoss Fuse