1

在我的环境中,我有使用 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]

所以我有两个问题:

  1. 我该如何解决?
  2. 我可以(以及如何)在失败之前(可能在 xml 序列化程序启动之前stripNonValidXMLCharacters)运行我的any_other_remove_invalid_chars方法吗?

非常感谢!!!

4

0 回答 0