2014-12-24 3 views
0

두 개의 타사 제품간에 발생하는 요청을 처리 할 수 ​​있도록 WSO2 ESB를 사용하고자합니다.wso2 esb 프록시 서비스 wsa : 동작 헤더가 잘못되었습니다.

발신 클라이언트를 변경할 수 없습니다. 웹 서비스를 변경할 수 없습니다.

클라이언트가 ESB에서 유효하지 않은 것으로 간주되는 SOAP 헤더와 함께 요청을 보냅니다. 웹 서비스는 클라이언트에서 직접 호출을받습니다. ESB를 거치지 않고 ESB에 요청이 들어오고 ESB가 엔드 포인트를 호출하지 않고 클라이언트에게 응답을 보냅니다. 디버그 추적은 헤더에 포함 된 작업 태그가 필수 표준을 준수하지 않는다고 처리기가 결정한다는 것을 나타냅니다. 우리는 아래와 같은 헤더를 만들 경우

TID: [0] [ESB] [2014-12-24 10:51:06,481] DEBUG {org.apache.axis2.context.MessageContext} - SoapAction is() {org.apache.axis2.context.MessageContext} 
TID: [0] [ESB] [2014-12-24 10:51:06,481] DEBUG {org.apache.axis2.builder.BuilderUtil} - char set encoding set from default =UTF-8 {org.apache.axis2.builder.BuilderUtil} 
TID: [0] [ESB] [2014-12-24 10:51:06,481] DEBUG {org.apache.axis2.handlers.addressing.AddressingInHandler} - No headers present corresponding to http://www.w3.org/2005/08/addressing {org.apache.axis2.handlers.addressing.AddressingInHandler} 
TID: [0] [ESB] [2014-12-24 10:51:06,481] DEBUG {org.apache.axis2.handlers.addressing.AddressingInHandler} - http://schemas.xmlsoap.org/ws/2004/08/addressing headers present in the SOAP message. Starting to process ... {org.apache.axis2.handlers.addressing.AddressingInHandler} 
TID: [0] [ESB] [2014-12-24 10:51:06,481] DEBUG {org.apache.axis2.client.Options} - getAction() from [email protected] {org.apache.axis2.client.Options} 
TID: [0] [ESB] [2014-12-24 10:51:06,481] DEBUG {org.apache.axis2.handlers.addressing.AddressingInHandler} - The wsa:Action header is present but its contents are empty. This violates rules in the WS-A specification. The SOAP node that sent this message must be changed. {org.apache.axis2.handlers.addressing.AddressingInHandler} 
TID: [0] [ESB] [2014-12-24 10:51:06,481] WARN {org.apache.axis2.addressing.AddressingFaultsHelper} - triggerActionNotSupportedFault: messageContext: [MessageContext: logID=d241a239ecfe36148a4f055b69d082a8d2b599e9cd6d6ba7] problemAction: {org.apache.axis2.addressing.AddressingFaultsHelper} 
TID: [0] [ESB] [2014-12-24 10:51:06,481] DEBUG {org.apache.axis2.i18n.ProjectResourceBundle} - org.apache.axis2.addressing.i18n.resource::handleGetObject(spec.FAULT_ACTION_NOT_SUPPORTED_REASON) {org.apache.axis2.i18n.ProjectResourceBundle} 
TID: [0] [ESB] [2014-12-24 10:51:06,481] ERROR {org.apache.synapse.transport.passthru.util.RelaySecuirtyMessageBuilderDispatchandler} - Error while executing the message at relaySecurity handler {org.apache.synapse.transport.passthru.util.RelaySecuirtyMessageBuilderDispatchandler} 
org.apache.axis2.AxisFault: The [action] cannot be processed at the receiver. 
    at org.apache.axis2.addressing.AddressingFaultsHelper.triggerAddressingFault(AddressingFaultsHelper.java:373) 
    at org.apache.axis2.addressing.AddressingFaultsHelper.triggerActionNotSupportedFault(AddressingFaultsHelper.java:336) 
    at org.apache.axis2.handlers.addressing.AddressingInHandler.extractActionInformation(AddressingInHandler.java:539) 
    at org.apache.axis2.handlers.addressing.AddressingInHandler.extractAddressingInformation(AddressingInHandler.java:249) 

클라이언트에 의해 생성 된 요청,

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:wsa="http://schemas.xmlsoap.org/ws/2004/08/addressing" xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 
    <soap:Header> 
    <wsa:Action/> 
    <wsa:MessageID>urn:uuid:926dbf87-1f59-4fff-b1e9-341286567f8c</wsa:MessageID> 
    <wsa:ReplyTo> 
     <wsa:Address>http://schemas.xmlsoap.org/ws/2004/08/addressing/role/anonymous</wsa:Address> 
    </wsa:ReplyTo> 
    <wsa:To>http://blahblahblah:8280/services/PassTrhuProxy1</wsa:To> 
    </soap:Header> 
    <soap:Body> 
    ... 
    </soap:Body> 
</soap:Envelope> 

우리는 SOAPUI에 요청을 생성하여 몇 가지 테스트를 수행 한 다음 헤더를 가지고, 우리는을 얻을 수 있습니다 서비스로부터의 적절한 응답.

<soap:Header xmlns:wsa="http://www.w3.org/2005/08/addressing"> 

나는 ESB가 메시지를 서비스에 전달하는 방법을 모른다. 방법이 있습니까?

궁금하다 1. 내가 WSO2 ESB에서 유효성 검사 오류를 무시하도록 조정할 수 있도록 메시지를 전송할 수있는 방법이 있습니까? 2. 유효성 검사를 완전히 끌 수있는 방법이 있습니까? 3. WSO2 ESB를 설치하여이 시나리오를 즉시 처리 할 수 ​​있습니까? 소스 코드 변경이 필요합니까? 내 질문에 고려에 대한

감사합니다 ....

+0

I 이것이 원래의 이유라고 생각하면 SOAP 작업을 보내지 않을 것입니다. 은 null입니다. ESB로 보내기 전에 속성을 설정해보십시오. 어느 순간에 오류가 발생합니까? 요청이 프록시/시퀀스에 충돌합니까? 그렇지 않으면 전송 수준에서 실패합니까? – Ratha

+0

Ratha를 읽어 주셔서 감사합니다. 불행히도 클라이언트 호출을 변경할 수 없습니다. –

+0

어느 시점에서 오류가 발생합니까? 요청이 프록시/시퀀스에 충돌합니까? 그렇지 않으면 전송 수준에서 실패합니까? – Ratha

답변

0

WS-주소 확인하는 것은 때로는 성가신,하지만 당신은 axis2.xml의 설정에 다음 줄을 추가하여, 그것을 떨어져 전환 할 수 있습니다

<parameter name="disableAddressingForInMessages" locked="false">true</parameter> 
+0

리드를 보내 주셔서 감사합니다. 초기 테스트가 실패했지만 WSO2 저장소 폴더 내에 config 파일의 인스턴스가 여러 개 발견되어 Il이 내일 다시 시도합니다. 나는 다음과 같은 섹션을 추가하고있는'이 '<매개 변수 이름 = "disableAddressingForInMessages">와 같은 사실 <매개 변수 이름 = "disableAddressingForOutMessages을"> '< "주소"= 때 ModuleConfig 이름> 진정한' –

+0

많은 파일에 대해 확신이 없으면 저장소/conf/axis2/axis2.xml 파일이 필요합니다. 이 매개 변수를 루트 노드 (axisconfig)의 자식으로 추가하고 작동합니다. – user3714601

+0

axis2.xml에서이 설정의 동작에 차이점을 볼 수 없었습니다.이 설정이 선택되거나 무시 된 것은 확실하지 않습니다. –

관련 문제