2012-02-22 1 views
1

Axis 1.4를 사용하여 웹 서비스에 연결하고 있습니다. 오류 설명 및 HTTP 상태 코드 202 응답 SOAP 봉투로 응답하여이 서비스 신호 오류는 다음과 같습니다HTTP 상태가 202 일 때 축 1.4가 SOAP 봉투를 디코딩하지 않습니다 - 버그 또는 기능입니까?

테스트 응답은 WSDL에 설명되어
<soap:Envelope> 
<soap:Body> 
<TestResponse> 
    <TestResult>wrong format</TestResult> 
</TestResponse> 
</soap:Body> 
</soap:Envelope> 

:에,

<s:element name="TestResponse"> 
    <s:complexType> 
     <s:sequence> 
     <s:element minOccurs="0" maxOccurs="1" name="TestResult" type="s:string"/> 
     </s:sequence> 
    </s:complexType> 
    </s:element> 

그래서 내 의견 모두 괜찮습니다. 문제는 Axis 생성 스텁에 해당 오류 메시지가 나타나지 않고 대신 null을 수신한다는 것입니다. SOAP 봉투를 디코딩하는,

if ((returnCode > 199) && (returnCode < 300)) { 
    if (returnCode == 202) { 
     return inp; 
    } 
    // SOAP return is OK - so fall through 
} 

그것은 코드를 건너 뜁니다 : 나는 디버깅, 나는 HTTPSender 클래스 라인 (705)에 선을 발견했습니다. 그래서, 마침내, 내가 잘못한 요청을 보냈습니다. (사용자 암호가 만료 된 것과 같은 런타임이 될 수 있습니다.) 오류 설명을 수신합니다. 그러나 Axis를 사용하기 때문에 아무런 액세스가없고 매우 디버깅을하는 null 만 수신합니다. 하드 (내가 Wireshark를 사용하여 발견 한 게시 된 응답).

제 질문은 버그입니까? 기능입니까? 웹 서비스가 HTTP 상태 202 또는 표준을 잘못 사용하도록 허용 한 회사가 허용하고 있으며 Axis가 너무 원시적이어서 지원하지 못합니까? 기껏해야 나는 수동으로 통신을 코딩하는 것을 피하고 싶습니다. HttpClient을 아파치 또는 비슷한 것으로부터 ....

답변

1

버그처럼 보입니다. HTTP 202 Accepted 상태 코드는 요청이 수락되었음을 나타내는 데 사용되지만이를 완료하려면 추가 처리가 필요합니다. 응답 은 서비스에 대해 수행 할 수있는 콜백을 나타내며 요청 상태를 확인하고 설명 메시지가있는 본문을 포함해야합니다.

웹 서비스의 경우 서비스 구현자가 서비스 계약 (이 경우 WSDL)과 일치하는 한 본문 응답을 처리해야합니다. 그러나 Axis의 구현 자들은 다르게 느껴졌을 수도 있습니다.

어쨌든 공급 업체가 202 개의 상태 코드를 잘못 사용하여 오류를 반환하고 있으며 이는 문제의 (큰) 부분입니다.

+0

그래서 propably 모두 오류가 있지만, 질문은, 어떻게해야합니까? Axis 소스를 적절한 해결책으로 수정하고 있습니까? –

+1

축을 패치해야 할 수도 있습니다. https://issues.apache.org/jira/browse/AXIS-1845에서 해결되지 않은 1.x 지점에 대한 미해결 요청이있는 것 같습니다. – Perception