![](/img/trans.png)
[英]Spring Integration Java DSL - How to invoke int-http:outbound-gateway?
[英]Handle Http errors with spring integration on int-ws:outbound-gateway
我在處理<int-ws:outbound-gateway>
上的http錯誤時遇到問題
我嘗試在<int:gateway>
上放置一個error-channel
,但是它似乎不起作用,因為我收到了編組異常。
另外我覺得這是不對的,從<int-ws:outboung-gateway>
收到消息后,應該在某個地方捕獲到HTTP錯誤。
我的消息傳遞系統是這樣設置的:
<int:gateway> -> channel -> transformer -> channel -> <int-ws:outboung-gateway>
問題:通過spring集成捕獲HTTP錯誤的正確方法是什么?
編輯后
<int:channel id="checkProcessRequestChannel"/>
<int:channel id="checkProcessResponseChannel"/>
<int:channel id="errorChannel"/>
<!-- channels for connecting to the outbound gateway -->
<int:channel id="checkProcessOutboundRequestChannel"/>
<int:channel id="checkProcessOutboundResponseChannel"/>
<int:gateway id="eInvoiceGateway" service-interface="com.iquest.play.integration.einvoice.EInvoiceGateway" error-channel="errorChannel">
<int:method name="checkProcessByCode" request-channel="checkProcessRequestChannel" reply-channel="checkProcessResponseChannel"/>
<int:gateway>
<int:transformer ref="eInvoiceTransformer" method="transformCheckProcessRequest" input-channel="checkProcessRequestChannel" output-channel="checkProcessOutboundRequestChannel"/>
<int:transformer ref="eInvoiceTransformer" method="transformCheckProcessResponse" input-channel="checkProcessOutboundResponseChannel" output-channel="checkProcessResponseChannel"/>
<int-ws:outbound-gateway id="checkClientByCodeOutboundGW"
request-channel="checkProcessOutboundRequestChannel"
reply-channel="checkProcessOutboundResponseChannel"
marshaller="eInvoiceMarshaller"
unmarshaller="eInvoiceMarshaller"
destination-provider="eInvoiceUriProvider"
message-factory="eInvoiceMessageFactory"
/>
FIX:因此,在網關上放置error-channel
后,線程被卡在某個地方。 這是一個非常虛擬的問題,網關錯誤通道的service-activator
的名稱為errorHandler
,它可能由spring名稱空間使用->更改bean名稱解決了該問題。
我們可以在解組期間處理Spring集成中的http錯誤。
編寫一個自定義的解組器並捕獲肥皂故障消息。
本文清楚地說明了如何處理肥皂故障消息。
http://blog.hostmasterzone.com/how-to-unmarshal-soap-fault-in-spring-integration-web-service/
<bean id="hmzJaxbMarshaller" class="org.springframework.oxm.jaxb.Jaxb2Marshaller">
<property name="contextPaths">
<list>
<value>org.hmz.request.types</value>
</list>
</property>
</bean>
<bean id="custJaxbUnMarshaller" class="com.jay.hmz.util.CustJaxbUnMarshaller" >
<property name="contextPaths">
<list>
<value>org.hmz.request.types</value>
</list>
</property>
</bean>
<int:chain input-channel="channel.in" output-channel="channel.out">
<int:transformer method="transformParentRequestById"><bean class="org.jay.hmz.api.transformers.OrderTransformer"/></int:transformer>
<int-ws:header-enricher><int-ws:soap-action value="${order.request.uri}"/></int-ws:header-enricher> <int-ws:outbound-gateway interceptors="hmzSecurityInterceptor" mapped-request-headers="GUID, USER_REF" request-callback="hmzWebServiceMessageCallback" unmarshaller="custJaxbUnMarshaller" marshaller="hmzJaxbMarshaller" uri="${order.request.uri}"/>
<int:transformer method="transformRetrieveParentOrderResponse"><bean class="org.jay.hmz.api.transformers.OrderTransformer"/></int:transformer>
</int:chain>
<int:service-activator input-channel="requestErrorChannel" output-channel="response.out" ref="requestErrorHandler" method="handleFailedOrderRequest"/>
<bean id="requestErrorHandler" class="org.jay.hmz.api.errorhandler.RequestErrorHandler"/>
public class CustJaxbUnMarshaller extends Jaxb2Marshaller {
@Override
public Object unmarshal(Source source, MimeContainer mimeContainer)
throws XmlMappingException {
LOGGER.debug("Inside Custom JaxbWrapper unmarshal");
Object mimeMessage = new DirectFieldAccessor(mimeContainer)
.getPropertyValue("mimeMessage");
Object unmarshalObject = null;
if (mimeMessage instanceof SaajSoapMessage) {
SaajSoapMessage soapMessage = (SaajSoapMessage) mimeMessage;
String faultReason = soapMessage.getFaultReason();
if (faultReason != null) {
throw convertJaxbException(new JAXBException(faultReason));
} else {
unmarshalObject = super.unmarshal(source, mimeContainer);
}
}
return unmarshalObject;
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.