Java WS-XML序列化在发生JAXB解组之前失败
在我的环境中,我让客户机(Java6)使用JAX-WS和basicHttpBinding调用wcf(.NET3.5)wcf服务 我有一些从wcf服务返回的无效xml字符作为字符串值 我添加了自定义JAXB转换器,如Java WS-XML序列化在发生JAXB解组之前失败,java,wcf,jaxb,xml-serialization,jax-ws,Java,Wcf,Jaxb,Xml Serialization,Jax Ws,在我的环境中,我让客户机(Java6)使用JAX-WS和basicHttpBinding调用wcf(.NET3.5)wcf服务 我有一些从wcf服务返回的无效xml字符作为字符串值 我添加了自定义JAXB转换器,如 <jaxb:javaType name="java.lang.String" xmlType="xs:string" parseMethod="MyClass.parseStringToSafeXmlString" print
<jaxb:javaType name="java.lang.String"
xmlType="xs:string"
parseMethod="MyClass.parseStringToSafeXmlString"
printMethod="MyClassprintStringToSafeXmlString" />
其中stripNonValidXMLCharacters
-一些删除无效字符的方法(不计算它的性能)
但当我接收到包含无效xml字符的字符串时,我的代码在调用parseStringToSafeXmlString
之前发生异常(对于有效字符串,调用了方法,我停止了断点)
原因:javax.xml.stream.XMLStreamException:ParseError at
[行,列]:[1834]消息:字符引用“”无效
XML字符。at
com.sun.org.apache.xerces.internal.impl.XMLStreamReaderImpl.next(XMLStreamReaderImpl.java:594)
约[?:1.6.0_24]at
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]at
com.sun.xml.internal.bind.v2.runtime.unmarshaller.UnmarshallerImpl.unmarshal0(UnmarshallerImpl.java:349)
约[?:1.6.0_24]at
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]at
com.sun.xml.internal.ws.message.stream.StreamMessage.readPayloadAsJAXB(StreamMessage.java:249)
约[?:1.6.0_24]at
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]
所以我有两个问题:
stripNonValidXMLCharacters
或任何其他\u删除\u无效\u chars
方法
非常感谢!!!您找到解决问题的方法了吗?不完全是-那是很久以前的事了,可能是事情变了。但我所做的只是清理了服务大小上的无效字符。这毕竟是我所理解的,但在真正使用数据之前,没有选择对数据进行按摩似乎是不对的;但是无效字符中断的论点ng XML契约也是正确的。我认为SOAP应该退役:)@UCJava:)generally-aggre
public static String parseStringToSafeXmlString(String value) {
return stripNonValidXMLCharacters(value);
}
public static String printStringToSafeXmlString(String value) {
return stripNonValidXMLCharacters(value);
}