2012-02-14 3 views
2

SOAP 메시지 구문 분석과 관련된 문제가 있습니다.첨부 파일이있는 비누 SAAJ

messageFactory = MessageFactory.newInstance(SOAPConstants.SOAP_1_1_PROTOCOL); 
message = messageFactory.createMessage(mimeHeaders, req.getInputStream()); 

내가 JMeter를 사용하고, 서블릿을 테스트하려면 :

------=_Part_3_5438437.1107262647279 

Content-Type: text/xml 

<?xml version="1.0" encoding="UTF-8"?> 
<soap-env:Envelope xmlns:soap-env="http://schemas.xmlsoap.org/soap/envelope/"> 
    <soap-env:Body> 
    <content> 
    [...] 
    </content> 
    </soap-env:Body> 
</soap-env:Envelope> 

------=_Part_3_5438437.1107262647279 
Content-Type: text/plain; charset=ISO-8859-1 

text 
------=_Part_3_5438437.1107262647279-- 

이 메시지를 수신하고 분석해야 내 자바 서블릿의 추출물이다 :
이는 메시지입니다. HTTP 요청의 원시 게시물 본문에 SOAP 메시지를 넣습니다. 이 넣어 I 헤더 : 콘텐츠 형 다중/관련; Part_3_5438437.1107262647279

경계 = ---- = _을

문제 번호 1 : 디버깅 I 그 경계를 볼 수 있기 때문에, SAAJ의 해석이 도청 것 같다 - = null로 표시됩니다. =가 토큰으로 사용될 수 있고 더 이상 사용되지 않습니다. 그래서 나는 몸과 머리에서 모두 제거했습니다. 이것은 커다란 문제입니다. 왜냐하면 내가받는 입력을 변경할 수 없기 때문에 잠시 동안 할 수있는 척 해봅시다. 그러면 문제 번호 2로 넘어갑니다. 이제 경계가 올바르게 구문 분석되지만 예외가 발생합니다. com.sun.xml.messaging.saaj.SOAPExceptionImpl : SOAP 부분의 Content-Type이 잘못되었습니다 : 텍스트/일반

좋아, 나는 그것을 해결하는 방법을 알고 있다고 믿고, 나는 콘텐츠 유형 헤더에 유형을 추가해야한다 : 콘텐츠 유형 다중 부분/관련, 유형 = 텍스트/xml; 경계 = ----_ Part_3_5438437.1107262647279

네,하지만 물론 나는 다른 불쾌한 예외가 있습니다 com.sun.xml.messaging.saaj.SOAPExceptionImpl : com.sun.xml.messaging.saaj.soap.MessageImpl.parseContentTy에 메시지 을 내면화 할 수 없음을 pe (MessageImpl.java:337)

저는 saaj-impl-1.3.18과 saaj-api-1.3.3을 사용하고 있습니다.
자바 버전 "1.6.0_29"
자바 (TM) SE 런타임 환경 (1.6.0_29-b11-402-11D50b를 구축)
자바 핫스팟 (TM) 64 비트 서버 VM (20.4-b02-402를 구축, 혼합 모드)

답변

2

여기 라인에서 문제의 2 번 거짓말에 대한 해결책 : 다른 콘텐츠 유형은 기본적으로 일반 텍스트 /로 가정

------=_Part_3_5438437.1107262647279 

Content-Type: text/xml 

그것은 멀리 가야한다. Brian Joh 덕분에 이것을 지적 해 주신 http://twitter.com/brianwjoh에게 감사드립니다.
문제 번호 1에 대해 경계 값을 입력하여 간단하게 해결했습니다. 유형에 대해서도 동일하게 적용됩니다.

type="text/xml";boundary="----=_Part_3_5438437.1107262647279"