camel-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From njssferreira <nuno.ferre...@stef.com>
Subject Camel route not working after update from Camel 2.13.0 to 2.17.2
Date Fri, 07 Apr 2017 16:21:31 GMT
Hi everyone,

after upgrading the Java implementation of Camel from 2.13.0 to 2.17.2 (and
cxf-rt-frontend-jaxrs from 2.7.10 to 3.1.5, and spring framework from 3.2.8
to 4.3.2), the webapp that is serving as a proxy stopped working correctly. 

The app is supposed to intercept a webservice request, modify fields that
are defined in a properties file throught the ContextManager class, and
forward the request to the correct endpoint.

After the upgrade, the app is unable to set the missing fields in the
original request, thus returning the following message:
"REQUEST_MESSAGE_NOT_COMPLIANT_WITH_SCHEMA - Your request message does not
comply to the web service schema".

This is of course expected since the missing fields are not being set. 

Any help would be greatly appreciated.

My Camel route definition is as follows:

*CreditLimitRequestServiceRoute.class*

public class CreditLimitRequestServiceRoute extends AbstractEHRoute {

	@Autowired
	private ContextManager contextManager;
	
	@Override
	public void configure() throws Exception {

		Namespaces ns = new Namespaces("ns1", "http://ehsmartlink/commonError");
		
		onException(SoapFault.class)
		
.to("consoleflux:message?level=ERROR&text=${exception.message}&content=${exception.detail}")
			.setHeader("soapFaultDetail", simple("${exception.detail}"))
			.choice()
				.when(and(header("soapFaultDetail").isNotNull(),
xpath("//ns1:commonError/errorType/text() = 'BusinessError'", ns,
"soapFaultDetail")))
					.to("consoleflux:finish?ignoreContent=true")
				.otherwise()
					.to("consoleflux:error?ignoreContent=true");

		onException(Exception.class)
			.to("consoleflux:error");

	
from("cxf:bean:creditLimitRequestServiceProxy?dataFormat=PAYLOAD").routeId("creditLimitRequestServiceRoute")
			.log(LoggingLevel.INFO, "Invocation du WS").streamCaching()
			.to("consoleflux:start?source=SOA&dest=EH&type=CREDIT_LIMIT")
			.to("consoleflux:message?ignoreContent=true&text=Affectation du Contexte
EH")
			.setHeader("context").xpath("//context")
			.bean(contextManager, "setContext")
			.to("consoleflux:message?ignoreContent=true&text=Invocation du WS EH
${headers.operationName}")
			.to("cxf:bean:creditLimitRequestService?dataFormat=PAYLOAD")
			.to("consoleflux:finish");

	}

}
*AbstractEHRoute.class*

public abstract class AbstractEHRoute extends RouteBuilder {
	
	protected XPathBuilder xpath(String text, Namespaces namespaces, String
headerName) {
		XPathBuilder xpath = XPathBuilder.xpath(text).namespaces(namespaces);
		xpath.setHeaderName(headerName);
		return xpath;
	}
	
}

*ContextManager*

package com.stef.soa.eh.integration.beans;

import static com.google.common.base.Objects.firstNonNull;
import static com.google.common.base.Strings.isNullOrEmpty;

import java.util.Map;
import java.util.UUID;

import org.apache.camel.Header;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;

import com.google.common.base.Preconditions;
import com.google.common.collect.Maps;

@Component
public class ContextManager {

	private static final String USER_NAME = "userName";  
	private static final String USER_PASSWORD = "userPassword";
	private static final String LANGUAGE_TEXT_IDENTIFIER =
"languageTextIdentifier";
	private static final String TRANSACTION_IDENTIFIER =
"transactionIdentifier";
	private static final String POLICIY_IDENTIFIER = "policyIdentifier";
	private static final String POLICY_EXTENSION_IDENTIFIER =
"policyExtensionIdentifier";
	private static final String POLICY_EHBU_IDENTIFIER =
"policyEHBUIdentifier";
	private static final String IP_ADRESS = "ipAdress";
	
	@Value("${eh.context.userName}")
	private String userName;

	@Value("${eh.context.userPassword}")
	private String userPassword;

	@Value("${eh.context.languageTextIdentifier}")
	private String languageTextIdentifier;

	@Value("${eh.context.policyIdentifier}")
	private String policyIdentifier;

	@Value("${eh.context.policyExtensionIdentifier}")
	private String policyExtensionIdentifier;

	@Value("${eh.context.policyEHBUIdentifier}")
	private String policyEHBUIdentifier;

	@Value("${eh.context.ipAdress}")
	private String ipAdress;

	public void setContext(@Header("context") Node context) {
		
		Preconditions.checkNotNull(context, "Le contexte doit ĂȘtre renseignĂ©");
		
		// Suppression des noeuds enfants avec sauvegarde les valeurs courantes
dans une map
		Map<String, String> currentValues = Maps.newHashMap();
		NodeList list = context.getChildNodes();
		for (int i = list.getLength() - 1; i >= 0; i--) {
			Node child = list.item(i);
			if (child.getNodeType() == Node.ELEMENT_NODE &&
!isNullOrEmpty(child.getTextContent())) {
				currentValues.put(child.getNodeName(), child.getTextContent());
			}
			context.removeChild(child);
		}
		
		// Ajout des noeuds enfants
		appendChild(context, USER_NAME, userName, currentValues);
		appendChild(context, USER_PASSWORD, userPassword, currentValues);
		appendChild(context, LANGUAGE_TEXT_IDENTIFIER, languageTextIdentifier,
currentValues);
		appendChild(context, TRANSACTION_IDENTIFIER, UUID.randomUUID().toString(),
currentValues);
		appendChild(context, POLICIY_IDENTIFIER, policyIdentifier, currentValues);
		appendChild(context, POLICY_EXTENSION_IDENTIFIER,
policyExtensionIdentifier, currentValues);
		appendChild(context, POLICY_EHBU_IDENTIFIER, policyEHBUIdentifier,
currentValues);
		appendChild(context, IP_ADRESS, ipAdress, currentValues);
	}
	
	private void appendChild(Node node, String name, String value, Map<String,
String> currentValues) {
		Document document = node.getOwnerDocument();
		Element child = document.createElement(name);
		child.setTextContent(firstNonNull(currentValues.get(name), value));
		node.appendChild(child);
	}

}

*context.xml*

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans" 
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
	xmlns:context="http://www.springframework.org/schema/context"
	xsi:schemaLocation="http://www.springframework.org/schema/beans
             		http://www.springframework.org/schema/beans/spring-beans.xsd
             		http://www.springframework.org/schema/context
             	
http://www.springframework.org/schema/context/spring-context.xsd">

	<context:property-placeholder location="classpath:eh.properties,
file:///${eh.home}/conf/eh.properties"
		ignore-resource-not-found="true" system-properties-mode="OVERRIDE" />

	<context:component-scan base-package="com.stef.soa.eh" />

	<context:annotation-config />

	<import resource="classpath:META-INF/eh/spring/broker.xml" />
	<import resource="classpath:META-INF/eh/spring/camel.xml" />
	<import resource="classpath:META-INF/eh/spring/cxf.xml" />
	<import
resource="classpath:META-INF/soa-console-flux-client/spring/context.xml"/>

</beans>

*camel.xml*

<?xml version="1.0" encoding="UTF-8"?>
<beans 
	xmlns="http://www.springframework.org/schema/beans" 
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
	xmlns:http="http://cxf.apache.org/transports/http/configuration"
	xsi:schemaLocation="
		http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd
        http://camel.apache.org/schema/spring 
   		http://camel.apache.org/schema/spring/camel-spring.xsd
  		http://cxf.apache.org/transports/http/configuration
		http://cxf.apache.org/schemas/configuration/http-conf.xsd" >
    
	
	<camelContext xmlns="http://camel.apache.org/schema/spring" id="ehContext">
		<properties>
			<property key="org.apache.camel.xmlconverter.output.indent" value="yes"/>
			<property
key="org.apache.camel.xmlconverter.output.{http://xml.apache.org/xslt}indent-amount"
value="4"/>
		</properties>
		<package>com.stef.soa.eh.integration</package>
	</camelContext>

</beans>

*cxf.xml*

<?xml version="1.0" encoding="UTF-8"?>
<beans 
	xmlns="http://www.springframework.org/schema/beans" 
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
	xmlns:cxf="http://camel.apache.org/schema/cxf"
	xmlns:http="http://cxf.apache.org/transports/http/configuration"
	xmlns:sec="http://cxf.apache.org/configuration/security"
	xsi:schemaLocation="
		http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd
  		http://camel.apache.org/schema/cxf
  		http://camel.apache.org/schema/cxf/camel-cxf.xsd
  		http://cxf.apache.org/transports/http/configuration
		http://cxf.apache.org/schemas/configuration/http-conf.xsd" >
    
	
	<http:conduit name="*.http-conduit">
		<http:client ProxyServer="${proxy.host}" ProxyServerPort="${proxy.port}" 
			ConnectionTimeout="${http.client.connectionTimeout}"
ReceiveTimeout="${http.client.receiveTimeout}" />
		<http:proxyAuthorization>
			<sec:UserName>${proxy.username}</sec:UserName>
			<sec:Password>${proxy.password}</sec:Password>
		</http:proxyAuthorization>
		<http:tlsClientParameters>
			<sec:keyManagers keyPassword="${eh.keyStore.password}">
				<sec:keyStore type="pkcs12" password="${eh.keyStore.password}"
file="${eh.home}/${eh.keyStore.file}" />
			</sec:keyManagers>
		</http:tlsClientParameters>
	</http:conduit>

	
	
	<cxf:cxfEndpoint 
		id="creditLimitRequestServiceProxy" 
		address="/creditLimitRequestService" 
	
wsdlURL="META-INF/eh/wsdl/CreditLimitRequestService/EH_SMARTLINK_CreditLimitRequestServiceV4.wsdl"

		serviceName="ns:CreditLimitRequestServiceV4"
		endpointName="ns:CreditLimitRequestServiceV4"
		xmlns:ns="http://ehsmartlink/CreditLimitRequestService/v4"
	/>

	<cxf:cxfEndpoint 
		id="creditLimitRequestService" 
		address="${eh.creditLimitRequestService.url}"
	
wsdlURL="META-INF/eh/wsdl/CreditLimitRequestService/EH_SMARTLINK_CreditLimitRequestServiceV4.wsdl"
		serviceName="ns:CreditLimitRequestServiceV4"
		endpointName="ns:CreditLimitRequestServiceV4"
		xmlns:ns="http://ehsmartlink/CreditLimitRequestService/v4"
		loggingFeatureEnabled="true"
	/>

	<cxf:cxfEndpoint 
		id="customerListRetrieveServiceProxy" 
		address="/customerListRetrieveService" 
	
wsdlURL="META-INF/eh/wsdl/CustomerListRetrieveService/CustomerListRetrieveV2.wsdl" 
		serviceName="ns:CustomerListRetrieveServiceV2"
		endpointName="ns:CustomerListRetrieveServiceV2"
		xmlns:ns="http://ehsmartlink/CustomerListRetrieve/v2"
	/>

	<cxf:cxfEndpoint 
		id="customerListRetrieveService" 
		address="${eh.customerListRetrieveService.url}"
	
wsdlURL="META-INF/eh/wsdl/CustomerListRetrieveService/CustomerListRetrieveV2.wsdl"
		serviceName="ns:CustomerListRetrieveServiceV2"
		endpointName="ns:CustomerListRetrieveServiceV2"
		xmlns:ns="http://ehsmartlink/CustomerListRetrieve/v2"
		loggingFeatureEnabled="true"
	/>

	<cxf:cxfEndpoint 
		id="firstEuroListRepertoireReadServiceProxy" 
		address="/firstEuroListRepertoireReadService" 
	
wsdlURL="META-INF/eh/wsdl/FirstEuroListRepertoireReadService/EH_SMARTLINK_FirstEuroListRepertoireReadService-v1.wsdl"

		serviceName="ns:FirstEuroListRepertoireReadService-v1"
		endpointName="ns:FirstEuroListRepertoireReadServicePort-v1_soap11"
	
xmlns:ns="http://eulerhermes.com/SMARTLINK/services/FirstEuroListRepertoireReadService/v1"
	/>

	<cxf:cxfEndpoint 
		id="firstEuroListRepertoireReadService" 
		address="${eh.firstEuroListRepertoireReadService.url}"
	
wsdlURL="META-INF/eh/wsdl/FirstEuroListRepertoireReadService/EH_SMARTLINK_FirstEuroListRepertoireReadService-v1.wsdl"

		serviceName="ns:FirstEuroListRepertoireReadService-v1"
		endpointName="ns:FirstEuroListRepertoireReadServicePort-v1_soap11"
	
xmlns:ns="http://eulerhermes.com/SMARTLINK/services/FirstEuroListRepertoireReadService/v1"
		loggingFeatureEnabled="true"
	/>

	<cxf:cxfEndpoint 
		id="firstEuroListRepertoireUpdateServiceProxy" 
		address="/firstEuroListRepertoireUpdateService" 
	
wsdlURL="META-INF/eh/wsdl/FirstEuroListRepertoireUpdateService/EH_SMARTLINK_FirstEuroListRepertoireUpdateService-v1.wsdl"

		serviceName="ns:FirstEuroListRepertoireUpdateService-v1"
		endpointName="ns:FirstEuroListRepertoireUpdateServicePort-v1"
	
xmlns:ns="http://eulerhermes.com/SMARTLINK/services/FirstEuroListRepertoireUpdateService/v1"
	/>

	<cxf:cxfEndpoint 
		id="firstEuroListRepertoireUpdateService" 
		address="${eh.firstEuroListRepertoireUpdateService.url}"
	
wsdlURL="META-INF/eh/wsdl/FirstEuroListRepertoireUpdateService/EH_SMARTLINK_FirstEuroListRepertoireUpdateService-v1.wsdl"
		serviceName="ns:FirstEuroListRepertoireUpdateService-v1"
		endpointName="ns:FirstEuroListRepertoireUpdateServicePort-v1"
	
xmlns:ns="http://eulerhermes.com/SMARTLINK/services/FirstEuroListRepertoireUpdateService/v1"
		loggingFeatureEnabled="true"
	 />	
					
	<cxf:cxfEndpoint 
		id="limitDetailReadServiceProxy" 
		address="/limitDetailReadService"
	
wsdlURL="META-INF/eh/wsdl/LimitDetailReadService/EH_SMARTLINK_LimitDetailReadService-v2.wsdl"

		serviceName="ns:LimitDetailReadService-v2"
		endpointName="ns:LimitDetailReadServicePort-v2"
	
xmlns:ns="http://eulerhermes.com/SMARTLINK/services/LimitDetailReadService/v2"
	/>

	<cxf:cxfEndpoint 
		id="limitDetailReadService" 
		address="${eh.limitDetailReadService.url}"
	
wsdlURL="META-INF/eh/wsdl/LimitDetailReadService/EH_SMARTLINK_LimitDetailReadService-v2.wsdl"

		serviceName="ns:LimitDetailReadService-v2"
		endpointName="ns:LimitDetailReadServicePort-v2"
	
xmlns:ns="http://eulerhermes.com/SMARTLINK/services/LimitDetailReadService/v2"
		loggingFeatureEnabled="true"
	/>

</beans>



--
View this message in context: http://camel.465427.n5.nabble.com/Camel-route-not-working-after-update-from-Camel-2-13-0-to-2-17-2-tp5797156.html
Sent from the Camel - Users mailing list archive at Nabble.com.

Mime
View raw message