2012-03-29 2 views
2

.NET 웹 서비스 클라이언트에 대한 인터페이스를 생성하는 데 CXF를 사용하고 있습니다. 나는 클라이언트를 사용할 때, 때때로, 나는 오류 얻을 : 온라인 많은 다른 소스에서XML 1.1 응답을 읽도록 CXF 웹 서비스 클라이언트 구성

WARNING: Interceptor for {http://xxxxxx.com}ChangeRequestWebService#{http://xxxxxx.com/ChangeRequestWebService}GetChangeRequestById has thrown exception, unwinding now 
[com.ctc.wstx.exc.WstxLazyException] com.ctc.wstx.exc.WstxParsingException: Illegal character entity: expansion character (code 0x1b 
at [row,col {unknown-source}]: [76,44] 

을, 내 CXF 클라이언트가 있음을 읽는 동안 웹 서비스는 XML 1.1에서의 응답을 인코딩 때문에이 것을 분명 XML 1.0을 기대하는 응답과 특수 문자 0x1b는 XML 1.0에서 불법입니다. 이제는 .NET 서비스 인 이 응답에서 XML 1.1을 사용해야하는지에 대해 논쟁하고 싶지 않습니다. WSDL이 분명히 1.0 일 때 (이것이 스펙이므로). 나는 그들이 보낸 내용을 오류없이 읽을 수 있기를 원한다.

CXF 클라이언트의 종속성을 살펴보면 해당 사이트에서 Woodstox 4.1.1을 사용하여 XML 1.1을 명확하게 지원합니다. 내가 알고 싶은 것은, 응답을받을 때 XML 1.1 파서를 사용하기 위해 CXF 클라이언트 (wsdl2java 바인딩시 또는 런타임 중)를 구성하는 방법이 있습니까? 내가 아는 사람들은 1.1을 사용해서는 안되며, 서버 측 필터를 사용해서는 안된다는 것입니다. 서버로 다시 데이터를 보내야하므로 클라이언트 쪽 문자를 필터링 할 수 없으므로 유효성 검사가 실패합니다.

.NET 서비스가 XML 1.1을 사용하고 있다고 명시 할 수는 있지만 서비스를 제어하지 못하기 때문에 문제를 파악하는 것이 더욱 번거로울 수 있습니다. 그들을 위해 그것을 고칠 것을 제안합니다. 또한 전송중인 데이터는 DB에 있으므로 XML 1.1 전용 문자가있는 것은 웹 서비스의 잘못이 아닙니다.

답변

1

대답은 ... 기본적으로 XML 1.1을 예상하도록 CXF를 사전 구성 할 수있는 방법이 없습니다. XML이 버전 태그없이 오면

기본적으로 :

<?xml version="1.1"> 

는 그 다음은 XML 1.1이 아니다. 이것이 바로 문제입니다. xml 헤더가 존재하고 XML 1.1을 지정하면 CXF의 구문 분석기가 XML 헤더를 XML 1.1로 구문 분석합니다. .NET 웹 서비스는 기본적으로 XML 헤더 태그를 보내지 않으므로 CXF의 파서는 XML 1.0으로 구문 분석합니다 (올바르게).

그렇다면 CXF에서 구문 분석하기 전에 입력 스트림을 포착하고 1.1을 지정하는 XML 버전 헤더를 "삽입"하여 문제를 해결할 수 있습니다. 작동하도록하는 방법을 찾으면 게시 할 것입니다.

관련 문제