2013-09-09 4 views
0

При использовании HTTP исходящая конечная точка (Mule 3.3.1), как это в моем югу от потока:HTTP Outbound Endpoint Exception на неправильном пути в конце потока

<http:outbound-endpoint exchange-pattern="request-response" host="www.myhost.com" port="80" path="SOMESERVICE.asmx?wsdl" contentType="text/xml" method="GET"/> 

или

<http:outbound-endpoint exchange-pattern="request-response" address="www.myhost.com:80/SOMESERVICE.asmx?wsdl" contentType="text/xml" method="GET"/> 

I получит 404 в случае, если служба не найдена по этому пути. Это дескриптор потока, основанный на http-состоянии 404. Когда поток заканчивается, я получаю это исключение (в трех частях, потому что полная трассировка стека должна быть длинной для StackOverflow) (только если атрибут пути неверен, для неправильного хоста или порт атрибутов не исключение не генерируется):

Часть 1:

WARN 2013-04-03 12:02:48,459 [[main].connector.http.mule.default.receiver.02] org.apache.cxf.phase.PhaseInterceptorChain: Application {http://support.cxf.module.mule.org/}ProxyService has thrown exception, unwinding now 
    org.apache.cxf.interceptor.Fault: Failed to route event via endpoint: DefaultOutboundEndpoint{endpointUri=http://www.myhost.com:80/SOMESERVICE.asmx?wsdl, connector=HttpConnector 
    { 
     name=connector.http.mule.default 
     lifecycle=start 
     this=6215723d 
     numberOfConcurrentTransactedReceivers=4 
     createMultipleTransactedReceivers=true 
     connected=true 
     supportedProtocols=[http] 
     serviceOverrides=<none> 
    } 
    , name='endpoint.http.www.myhost.com.80.SOMESERVICE.asmx.wsdl', mep=REQUEST_RESPONSE, properties={wsdl=, http.method=GET}, transactionConfig=Transaction{factory=null, action=INDIFFERENT, timeout=0}, deleteUnacceptedMessages=false, initialState=started, responseTimeout=10000, endpointEncoding=UTF-8, disableTransportTransformer=false}. Message payload is of type: GetMethod 
     at org.mule.module.cxf.MuleInvoker.invoke(MuleInvoker.java:151) 
     at org.apache.cxf.interceptor.ServiceInvokerInterceptor$1.run(ServiceInvokerInterceptor.java:58) 

Часть 2:

Caused by: org.mule.api.transport.DispatchException: Failed to route event via endpoint: DefaultOutboundEndpoint{endpointUri=http://www.myhost.com:80/SOMESERVICE.asmx?wsdl, connector=HttpConnector 
{ 
    name=connector.http.mule.default 
    lifecycle=start 
    this=6215723d 
    numberOfConcurrentTransactedReceivers=4 
    createMultipleTransactedReceivers=true 
    connected=true 
    supportedProtocols=[http] 
    serviceOverrides=<none> 
} 
, name='endpoint.http.www.myhost.com.80.SOMESERVICE.asmx.wsdl', mep=REQUEST_RESPONSE, properties={wsdl=, http.method=GET}, transactionConfig=Transaction{factory=null, action=INDIFFERENT, timeout=0}, deleteUnacceptedMessages=false, initialState=started, responseTimeout=10000, endpointEncoding=UTF-8, disableTransportTransformer=false}. Message payload is of type: GetMethod 
    at org.mule.transport.http.HttpClientMessageDispatcher.doSend(HttpClientMessageDispatcher.java:278) 

Часть 3:

Caused by: org.mule.transport.http.HttpResponseException: Not Found, code: 404 
    at org.mule.transport.http.HttpClientMessageDispatcher.doSend(HttpClientMessageDispatcher.java:278) 

Полная конфигурация:

<flow name="main"> 
    <http:inbound-endpoint exchange-pattern="request-response" address="http://localhost:8181/my-service/v1" doc:name="HTTP"/> 
    <cxf:proxy-service doc:name="SOAP" wsdlLocation="classpath:my-1.0.wsdl" 
     namespace="http://myservice.com/wsdl/my-service/1.0" service="myService" payload="envelope"/> 
    <logger level="TRACE" doc:name="Payload Logger" category="main" message="Payload: #[payload:java.lang.String]"/> 

    <flow-ref name="ping"/> 

    <!-- Exception should be catched here. --> 
    <catch-exception-strategy doc:name="Catch Exception Strategy"> 
     <logger message="Exception: #[payload:java.lang.String]" level="ERROR" category="main" doc:name="Logger"/> 
     <set-payload value="&lt;dummy/&gt;" doc:name="Reset Payload"/> 
     <mulexml:xslt-transformer maxIdleTransformers="2" maxActiveTransformers="5" xsl-file="exception-response.xslt" doc:name="Exception Transformer"> 
      <mulexml:context-property key="faultString" value="Unexpected Exception"/> 
      <mulexml:context-property key="errorCode" value="-1"/> 
      <mulexml:context-property key="errorMessage" value="Unexpected Exception."/> 
     </mulexml:xslt-transformer> 
    </catch-exception-strategy> 
</flow> 

<sub-flow name="ping"> 
    <logger message="Request payload: #[payload:java.lang.String]" level="TRACE" category="ping" doc:name="Logger"/> 

    <flow-ref name="http" /> 

    <mulexml:xslt-transformer maxIdleTransformers="2" maxActiveTransformers="5" doc:name="Response Transformation" xsl-file="response.xslt"/> 

    <!-- Here the correct response is printed and no exception. --> 
    <logger message="Response payload after transformation: #[payload:java.lang.String]" level="TRACE" category="ping" doc:name="Logger"/> 
</sub-flow> 

<sub-flow name="http"> 
    <logger message="Request payload: #[payload:java.lang.String]" level="TRACE" category="http" /> 

    <http:outbound-endpoint exchange-pattern="request-response" address="www.myhost.com:80/SOMESERVICE.asmx?wsdl" contentType="text/xml" method="GET"/> 

    <choice doc:name="Choice"> 
     <when expression="#[message.inboundProperties['http.status'] == 200]"> 
      <set-payload value="&lt;result&gt;OK&lt;/result&gt;" doc:name="OK"/> 
     </when> 
     <otherwise> 
      <set-payload value="&lt;result&gt;NotAvailable&lt;/result&gt;" doc:name="NotAvailable"/> 
     </otherwise> 
    </choice> 
</sub-flow> 

Мой основной поток делает использование кетчуп исключение-стратегии, но это не поймать исключение. Любая идея, что может быть неправильным?

Cheers,

Tuno

+2

Можете ли вы поделиться полную конфигурацию? – Seba

+0

Добавлена ​​полная конфигурация. – Tuno

ответ

1

Моя догадка, не смотря на конфигурации является то, что вы, вероятно, объявлен sub-flow, как <flow>, а не как <sub-flow>

+0

Именно это я и думал. У меня действительно было '' сначала, но недавно было реорганизовано на ''. Проблема все та же. – Tuno

-1

статус HTTP> = 400 не считается как само по себе исключение.
Если вы хотите, чтобы ваша стратегия исключения вступила в игру, вам нужно будет создать исключение на основе кода состояния HTTP. Просто добавьте следующее после <flow-ref name="ping"/>:

<message-filter throwOnUnaccepted="true"> 
    <message-property-filter pattern="message.inboundProperties['http.status'] >= 400" /> 
</message-filter> 
+0

Странно то, что после '' полезная нагрузка - это правильный xml-ответ, а не исключение. См. '<Выбор doc: name =" Выбор ">' и ' '. Моя регистрация подтверждает это. Я не знаю, почему это исключение все еще существует в конце основного потока. Добавление 'message-filter' просто запустит« Сообщение было отклонено фильтром ». Полезная нагрузка сообщения имеет тип: byte [] 'exception и скрывает исходное исключение, которого не должно быть. – Tuno