有谁能告诉我spring集成的位置:inbound-gateway设置它的SOAP Exception Resolver?
出站网关有一个我可以设置的属性,但入站没有。
我在将SOAPFault返回给调用者之前设置了Soap Fault Details。
我查看了AbstractSoapFaultDefinitionExceptionResolver并尝试将其追溯到我可以设置它的地方,但我似乎失败了。
任何人都有机会指出我正确的方向。
*********** UPDATE ********** 就像FYI一样,这是我根据Artem的建议得出的最终解决方案:
<bean id="exceptionResolver"
class="com.cloud.utils.CloudSoapFaultDefinitionResolver">
<property name="defaultFault" value="SERVER" />
</bean>
public class CloudMessagingSoapFaultDefinitionResolver extends SoapFaultAnnotationExceptionResolver {
private Logger log = LoggerFactory.getLogger(getClass());
private static final int THREE = 3;
/* (non-Javadoc)
* @see org.springframework.ws.soap.server.endpoint.AbstractSoapFaultDefinitionExceptionResolver#customizeFault(java.lang.Object, java.lang.Exception, org.springframework.ws.soap.SoapFault)
*/
@Override
protected void customizeFault(Object endpoint, Exception ex, SoapFault fault) {
SoapFaultDetail details = fault.addFaultDetail();
Method[] methods = ex.getClass().getDeclaredMethods();
if (ex instanceof MonitiseCloudServicesException) {
AbstractRuntimeException mcse = (AbstractRuntimeException) ex;
methods = mcse.getClass().getDeclaredMethods();
}
for(Method m:methods){
addDetailsElement(ex, details, m);
}
}
/**
* @param ex
* @param details
* @param m
*/
private void addDetailsElement(Exception ex, SoapFaultDetail details, Method m) {
if(m.getName().startsWith("get")){
SoapFaultDetailElement element = details.addFaultDetailElement(new QName(m.getName().substring(THREE)));
try {
element.addText((String) m.invoke(ex, new Object[]{}));
} catch (IllegalAccessException | IllegalArgumentException
| InvocationTargetException e) {
log.error("An error occured processing the SOAPFault detail node {}.",m.getName().substring(THREE));
}
}
}
}
答案 0 :(得分:1)
实际上不要混合inbound
和outbound
部分。从Spring WS的角度来看,它们分别是server
和client
。它们具有不同的配置性质。
因此,在服务器部分,您可以这样做:
<bean id="exceptionResolver"
class="org.springframework.ws.soap.server.endpoint.SoapFaultMappingExceptionResolver">
<property name="defaultFault" value="SERVER"/>
<property name="exceptionMappings">
<value>
org.springframework.oxm.ValidationFailureException=CLIENT,Invalid request
</value>
</property>
</bean>
这是因为任何Spring Integration <ws:inbound-gateway>
都是标准Spring WS MessageDispatcherServlet
配置的一部分:
<bean class="org.springframework.ws.server.endpoint.mapping.UriEndpointMapping"
p:defaultEndpoint-ref="ws-inbound-gateway"/>
所有Faul Resolving
工作都由Spring WS完成。