문제

(0x1a)와 같은 문자를 포함하는 문자열을 전달하는 웹 서비스와 클라이언트가 있습니다. 이들은 XML 1.0에서 유효하지만 XML 1.1에서 유효합니다. Axis의 XML 파서는 이러한 문자 참조로 인해 예외를 제외하고 있습니다. 응답을 XML 1.1로 구문 분석하거나 XML 선언을 삽입하는 방법이 있습니까? (현재는 하나도 없습니다.) 나는 핸들러를 사용하는 것을 살펴 보았지만 XML이 이미 구문 분석 된 후에 그들이 호출한다는 것을 이해한다는 것입니다.

도움이 되었습니까?

해결책

당신은 안에 지나가고 있습니까? InputStream 또는 Reader? 그렇다면 다른 클래스에서 소스를 랩핑 할 수 있습니다 ( BufferedReader 작동) 그러나 불필요한 캐릭터를 떨어 뜨리는 데 사용하십시오.

다른 팁

나는 당신이 이것으로 꽤 힘든 시간을 보낼 것이라고 생각합니다. 내 이해는 WSDL 2.0 표준이 XML 1.0에 구축된다는 것입니다. 그렇다면 WSDL (XML 1.0을 가정)을 설명하고 XML 1.1 문자로 메시지를 보내기 시작하는 어떤 종류의 서비스를 호출하고 있습니까?

AXIS2 서비스를 정의하면 Services.xml 파일에있는 핸들러를 정의 할 수 있습니다. 예를 들어 이 페이지 그들은 org.apache.axis2.receivers.rawxmlinoutmessagereceiver를 사용한 서비스를 가지고 있습니다.

파서가 입력을 XML 1.1로 취급하도록하는 옵션이 하나 더 있습니다. Axis2는 Woodstox Parser를 사용하므로 WstxInputFactory 방법을 무시합니다 createPrivateConfig():

@Override
public ReaderConfig createPrivateConfig() {
    ReaderConfig config = super.createPrivateConfig();
    config.enableXml11(true);
    return config;
}

그런 다음 시스템 속성을 통해 해당 사용자 정의 공장을 사용하십시오. -djavax.xml.stream.xmlinputfactory = mypackage.mywstxInputFactory

이러한 해결 방법은 유효하지 않은 XML을 생성하는 버기 웹 서비스를 완전히 변경할 수없는 경우에만 해당됩니다. 부작용이 발생할 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top