네임 스페이스가 작동 태그 내부에 정의 될 때 Castor Unmarshaling을 어떻게 처리 할 수 ​​있습니까?

StackOverflow https://stackoverflow.com/questions/626648

문제

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 들어오고 나가는 것을 검증해야 할 가치가 있습니다.

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