네임 스페이스가 작동 태그 내부에 정의 될 때 Castor Unmarshaling을 어떻게 처리 할 수 있습니까?
-
06-07-2019 - |
문제
Spring-Ws를 기반으로 계약 우선 웹 서비스를 개발하고 있습니다. 나는 Castor Marshaling에 의존하고 있으며 다음과 같은 문제를 해결했습니다.
"XMLNS"네임 스페이스가 Envelope 태그에 다음과 같은 것과 같은 요청이 수락됩니다.
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"
xmlns="http://www.mycompany.com/MyService/schemas">
<soap:Header/>
<soap:Body>
<doPlaceHoldRequest>
<hold>
<accountInfo>
<accountNumber>123456789</accountNumber>
</accountInfo>
<extended>false</extended>
<afterHours>false</afterHours>
<amountSavings>1.00</amountSavings>
<amountChecking>0.00</amountChecking>
</hold>
</doPlaceHoldRequest>
</soap:Body>
</soap:Envelope>
그러나 Spring-WS (XSD에서 생성 된)에서 제공 한 .wsdl에서 생성 된 .NET 및 Java 클라이언트는 다음과 같은 방식으로 요청을 구성합니다.
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Header/>
<soap:Body>
<doPlaceHoldRequest
xmlns="http://www.mycompany.com/MyService/schemas">
<hold>
<accountInfo>
<accountNumber>123456789</accountNumber>
</accountInfo>
<extended>false</extended>
<afterHours>false</afterHours>
<amountSavings>1.00</amountSavings>
<amountChecking>0.00</amountChecking>
</hold>
</doPlaceHoldRequest>
</soap:Body>
</soap:Envelope>
이로 인해 Castor가 던지는 예외가 발생하지 않습니다. 캐스트 가이 메시지를 유효한 것으로 인식하도록하려면 어떻게해야합니까? 내 WSDL (또는 자율적으로 자율적으로 사용하는 XSD)이 잘못되었을 수 있습니까?
해결책
이 블로그를 보면 다른 웹 서비스로 가지 않을 것이라고 생각합니다. :)http://springkbase.blogspot.com/2009/06/spring-webservice-with-castor.html
다른 팁
나는 첫 번째 Spring-Ws/Castor Web Service와 함께이 문제를 계속해서 달려 갔다. 내가 알 수있는 한, 라인을 따라 어딘가에 일부 구성 요소는 이름이 아닌 공간에서 페이로드를 추출합니다. 다시 말해, Doplaceholdrequest와 같은 노드는 최상위 네임 스페이스 선언을 상속하지 않고 XML 문서의 루트가되고 위의 두 경우에는 그로 인해 ~이다 당신이 원하는 네임 스페이스에서, 하나는 그렇지 않은 것 - 하나는 스키마에 대해 잘 확인하고 다른 하나는 그렇지 않습니다.
최상의 솔루션은 모든베이스를 덮는 것 같습니다. XSD에 모든 요소가 네임 스페이스에 있도록 ElementFormDefault = "자격"을 갖도록하십시오. 그런 다음 캐스터 맵핑의 모든 맵 투 요소에 NS-URI 및 NS-PREFIX를 지정하십시오. 결과는 모든 네임 스페이스 접두사와 함께 약간 무겁지만 게으른 고객에게는 훨씬 덜 깨지기 쉬운 것 같습니다. 그리고 서버 구성 요소에서 문서화되지 않은 동작.
JAX-WS는 빈 목록을 반환합니다 좋은 지적도 만듭니다. org.springframework.ws.soap.server.endpoint.interceptor.PayloadValidatingInterceptor
들어오고 나가는 것을 검증해야 할 가치가 있습니다.