我的服务正在使用肥皂服务。目标服务可以添加新字段,只要我们收到所需的所有字段,这些字段就不会破坏我们的服务。我正在使用 CXF 从 WSDL 生成 Java 代码,每当它找到新字段时它就会中断。是否可以将 CXF 配置为忽略新字段?
错误类似于
org.apache.cxf.interceptor.Fault: Unmarshalling Error: unexpected element (uri:"http://www.a.com/sed/b/products/2014/03/types", local:"BidOnly"). Expected elements are <{http://www.a.com/sed/b/products/2014/03/types}SaleTeam>,
at org.apache.cxf.jaxb.JAXBEncoderDecoder.unmarshall(JAXBEncoderDecoder.java:905) ~[cxf-rt-databinding-jaxb-3.2.0.jar:3.2.0]
at org.apache.cxf.jaxb.JAXBEncoderDecoder.unmarshall(JAXBEncoderDecoder.java:711) ~[cxf-rt-databinding-jaxb-3.2.0.jar:3.2.0]
at org.apache.cxf.jaxb.io.DataReaderImpl.read(DataReaderImpl.java:172) ~[cxf-rt-databinding-jaxb-3.2.0.jar:3.2.0]
我试图解决同样的问题,并偶然发现了这个问题:
CXF - Web 服务端点已更改,WSDL 尚未更改
显然,如果您将"set-jaxb-validation-event-handler"设置为"false",则会禁用解编收散器的此验证。所以在我的代码中,我添加了这个:
import org.apache.cxf.jaxws.EndpointImpl;
...
EndpointImpl endpoint = new EndpointImpl(...);
endpoint.getProperties().put("set-jaxb-validation-event-handler", "false");
我知道我正在回答一个老问题,但也许这对某人有用。