2012-01-30 3 views
0

문서 스타일 SOAP 웹 서비스를 호출했습니다. 그것은 SOAP UI와 함께 작동하지만, 나는 그것을 programaticaly 호출하려고 오류가 발생했습니다. 여기 웹 서비스 호출에서 '요소가 선언되지 않음'응답 받기

내가 서버에서지고있어 오류입니다 :

<SubmitRequestDocResponse xmlns="http://tripauthority.com/hotel"> 
    <SubmitRequestDocResult> 
    <ArnResponse xmlns:ns2="http://tripauthority.com/hotel" xmlns=""> 
     <Error> 
     <Message> 
       Request is not valid. Details: The 
       'http://tripauthority.com/hotel:ArnRequest' 
       element is not declared. 
     </Message> 
     </Error> 
    </ArnResponse> 
    </SubmitRequestDocResult> 
</SubmitRequestDocResponse> 

보이는 호출 코드와 같은 :

ARequestDoc requestDoc = objectFactory.createSubmitRequestDocARequestDoc(); 
ArnRequest request = requestFactory.createArnRequest(); 
requestDoc.getContent().add(request); 
SubmitRequestDocResult response = 
    soap.submitRequestDoc("id", "username", "password", requestDoc); 

그리고 사용되는 클래스를 조직하고 주석됩니다

패키지 com.company.server.ws :

@XmlAccessorType(XmlAccessType.FIELD) 
@XmlType(name = "", propOrder = { 
    "siteID", 
    "aUserName", 
    "aPassword", 
    "aRequestDoc" 
}) 
@XmlRootElement(name = "SubmitRequestDoc") 
@XmlSeeAlso(ArnRequest.class) 
public class SubmitRequestDoc { // Stuff... } 


@XmlAccessorType(XmlAccessType.FIELD) 
@XmlType(name = "", propOrder = { 
    "content" 
}) 
public static class ARequestDoc { // Stuff ... } 

패키지 com.company.server.ws.request :

:

@XmlAccessorType(XmlAccessType.FIELD) 
@XmlType(name = "", propOrder = { 
    "availability", 
    "rateDetails", 
    "reservation", 
    "cancellation" 
}) 
@XmlRootElement(name = "ArnRequest") 
public class ArnRequest { // Stuff ... } 

또한 com.company.server.wspackage-info.java는 다음을 갖는다

@javax.xml.bind.annotation.XmlSchema(
     namespace = "http://tripauthority.com/hotel", 
     elementFormDefault = javax.xml.bind.annotation.XmlNsForm.QUALIFIED) 
package com.company.server.ws; 

또한 가치있는 것을 위해 WSDLXSD for the Request

이 메시지가 제대로 보내려면 어떤 생각을 가지고 있습니까? SOAP UI를 사용하여 하드 코딩 된 문자열 요청을 보낼 수 있으며 정상적으로 작동합니다.

감사

편집 그것은 가치가 무엇인지에 대한 , 지금까지 내가 어떻게 든 ArnRequest 부분을 보낼 수 있다면 어떤 공간없이 통과 수도있다 내 생각 선언, 그렇게 할 수있는 방법이 있다면, 그러나 이는 단지 추측이며 모든 통찰력이 인정됩니다.

답변

0

작동시키기위한 방법을 알아 냈습니다. 나는이 상황을 제대로 이해한다면

@javax.xml.bind.annotation.XmlSchema(elementFormDefault = 
      javax.xml.bind.annotation.XmlNsForm.UNQUALIFIED) 
package com.company.server.ws.request; 

는, 그것의 :

나는 기본적으로 ArnRequest 개체에 대한 어떠한 네임 스페이스 선언과 같이 com.company.server.ws.request에서 다른 package-info.java 파일을 추가 serializer에게 ArnRequest 개체에 대해 'no'네임 스페이스를 설정하도록 지시하고 양식 기본값을 UNQUALIFIED로 설정하여 유효성을 해제합니다.

정확하게 무엇을하고 있는지 확실하지 않지만, 지금은 분명히 작동하므로 더 이상 통찰력을 얻지 못할 것입니다.

관련 문제