有没有办法使用Apache CXF修改SoapBody消息?我试图在Phase.SEND模式下使用Interceptors功能尝试在SoapBody中添加带有结果的xml架构。我没有运气。
问题是我想用xml架构验证结果消息。 SoapBody的当前输出发送了带有xml架构的结果消息,该架构使用了在目标位置不可用的架构位置的引用。
为了验证结果响应消息,我在BindingProvider中的ResponseContext中添加了“schema-validation-enabled”为true;但是,我不确定它是否有效。
我尝试添加/ attache原始模式,而不是使用它的引用和SoapBody的响应消息。有没有办法使用注释或任何其他方法来使用给定的xml架构进行验证?
任何想法和回应都表示赞赏。
<?xml version="1.0" encoding="utf-8"?>
<xs:schema id="resultSet" targetNamespace="http://www.xxx.com/" xmlns:mstns="http://www.xxx.com/" xmlns="http://www.xxx.com/" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" attributeFormDefault="qualified" elementFormDefault="qualified" xmlns:app1="http://www.xxx.com/ResultSet.xsd">
<xs:import namespace="http://www.xxx.com/ResultSet.xsd" schemaLocation="RalsDeviceService_app1.xsd" />
<xs:element name="resultSet" msdata:IsDataSet="true" msdata:Locale="en-US">
<xs:complexType>
<xs:choice minOccurs="0" maxOccurs="unbounded">
<xs:element ref="app1:ResultSet" />
</xs:choice>
</xs:complexType>
</xs:element>
</xs:schema>
<resultSet xmlns="http://www.xxx.com/">
<ns2:ResultSet xmlns:ns2="http://www.xxx.com/ResultSet.xsd">
<ns2:Results>
...
..
.
</resultSet>
答案 0 :(得分:0)
关于这个问题我工作了三天=)Inteceptor方式没有错。这是我简单的演示实现
public static class MySendingReturn extends AbstractPhaseInterceptor<Message> {
public MySendingReturn() {
super(Phase.SEND);
}
@Override
public void handleMessage(Message message) throws Fault {
XMLStreamWriter content = message.getContent(XMLStreamWriter.class);
try {
MySchema context = new MySchema();
content.writeStartElement("testOperationWithParameter");
content.writeStartElement("returnValue");
content.writeCharacters("Halllllo-Return");
} catch (XMLStreamException e) {
e.printStackTrace();
}
}
}
XMLStreamWriter的当前元素是SoapMessage的BODY元素。这个拦截器我在我的服务实例上注册:
service.getOutInterceptors().add(new MySendingReturn());