在我的环境中,我有使用 JAX-WS 和 basicHttpBinding 的客户端(java 6)调用 wcf(.Net 3.5)wcf 服务。
我有一些从 wcf 服务返回的无效 xml 字符作为字符串值。
我添加了自定义 JAXB 转换器,例如
<jaxb:javaType name="java.lang.String"
xmlType="xs:string"
parseMethod="MyClass.parseStringToSafeXmlString"
printMethod="MyClassprintStringToSafeXmlString" />
MyClass 有方法
public static String parseStringToSafeXmlString(String value) {
return stripNonValidXMLCharacters(value);
}
public static String printStringToSafeXmlString(String value) {
return stripNonValidXMLCharacters(value);
}
Where stripNonValidXMLCharacters
- 一些删除无效字符的方法(不测量它的作用)。
但是当我收到带有无效 xml 字符的字符串时,我的代码在调用之前parseStringToSafeXmlString
失败并出现异常(对于有效字符串,调用方法并且我停止了断点。
原因:javax.xml.stream.XMLStreamException: ParseError at [row,col]:[1,834]消息:字符引用“”是无效的 XML 字符。 在 com.sun.org.apache.xerces.internal.impl.XMLStreamReaderImpl.next(XMLStreamReaderImpl.java:594) ~[?:1.6.0_24] 在 com.sun.xml.internal.ws.util.xml.XMLStreamReaderFilter。 next(XMLStreamReaderFilter.java:81) ~[?:1.6.0_24] at com.sun.xml.internal.bind.v2.runtime.unmarshaller.StAXStreamConnector.bridge(StAXStreamConnector.java:181) ~[?:1.6.0_24 ] 在 com.sun.xml.internal.bind.v2.runtime.unmarshaller.UnmarshallerImpl.unmarshal0(UnmarshallerImpl.java:349) ~[?:1.6.0_24] 在 com.sun.xml.internal.bind.v2.runtime .BridgeImpl.unmarshal(BridgeImpl.java:109) ~[?:1.6.0_24] at com.sun.xml.internal.bind.api.Bridge.unmarshal(Bridge.java:222) ~[?:1.6.0_24]在 com.sun.xml.internal.ws.message.stream.StreamMessage.readPayloadAsJAXB(StreamMessage.java:249) ~[?:1.6.0_24] 在 com.sun.xml.internal.ws.client.sei。ResponseBuilder$Body.readResponse(ResponseBuilder.java:458) ~[?:1.6.0_24] at com.sun.xml.internal.ws.client.sei.SyncMethodHandler.invoke(SyncMethodHandler.java:110) ~[?:1.6 .0_24]
所以我有两个问题:
- 我该如何解决?
- 我可以(以及如何)在失败之前(可能在 xml 序列化程序启动之前
stripNonValidXMLCharacters
)运行我的any_other_remove_invalid_chars
方法吗?
非常感谢!!!