-
Bug
-
Resolution: Done
-
Critical
-
None
-
None
-
None
3 tests of templates are failing spotting the issue:
Error Message Expecting empty but was:<[{"lspDiagnostic"=Diagnostic [ range = Range [ start = Position [ line = 48 character = 49 ] end = Position [ line = 48 character = 59 ] ] severity = Error code = Either [ left = cvc-complex-type.3.2.2 right = null ] codeDescription = null source = "xml" message = "cvc-complex-type.3.2.2: Attribute 'headerName' is not allowed to appear in element 'setHeader'." tags = null relatedInformation = null data = null ], "severity"=2, "charStart"=2386, "languageServerId"="org.eclipse.wildwebdeveloper.xml", "Creation time: "=1623413595644L, "charEnd"=2396, "resource affected"="/jenkins/pullrequest-fuse-templates/editor/tests/org.fusesource.ide.projecttemplates.tests.integration/target/work sp@cé/FuseIntegrationProjectCreatorRunnableForAMQIT-AMQSpringProject-2.18.1.redhat-000026/src/main/resources/META-INF/spring/camel-context.xml", "message"="cvc-complex-type.3.2.2: Attribute 'headerName' is not allowed to appear in element 'setHeader'.", "lineNumber"=49, "resource affected content"="<?xml version="1.0" encoding="UTF-8"?> <!-- Configures the Camel Context--> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation=" http://camel.apache.org/schema/spring https://camel.apache.org/schema/spring/camel-spring.xsd http://www.springframework.org/schema/beans https://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"> <bean id="orderGenerator" class="com.mycompany.templates.camel.activemq.OrderGenerator"/> <!-- Lets connect the Camel ActiveMQ component to the broker. --> <bean class="org.apache.activemq.ActiveMQConnectionFactory" id="activemq-connection-factory"> <property name="brokerURL" value="${broker.url}"/> <property name="userName" value="${broker.username}"/> <property name="password" value="${broker.password}"/> </bean> <bean class="org.apache.activemq.camel.component.ActiveMQComponent" id="activemq"> <property name="configuration"> <bean class="org.apache.activemq.camel.component.ActiveMQConfiguration"> <property name="connectionFactory" ref="activemq-connection-factory"/> </bean> </property> </bean> <!-- The namespace for the camelContext element in Blueprint is 'http://camel.apache.org/schema/blueprint'. Additionally, we can also define namespace prefixes we want to use them in the XPath expressions in our CBR. While it is not required to assign id's to the <camelContext/> and <route/> elements, it is a good idea to set those for runtime management purposes (logging, JMX MBeans, ...) --> <camelContext xmlns="http://camel.apache.org/schema/spring" xmlns:order="http://com.mycompany/examples/order" id="amq-example-context"> <!-- a route to generate a random order every 5th second --> <route id="generate-order"> <from id="timerToGenerateOrder" uri="timer:order?period=5000&delay=2000&fixedRate=true"/> <bean id="generatorOrder" ref="orderGenerator" method="generateOrder"/> <setHeader id="updateFileNameHeader" headerName="Exchange.FILE_NAME"> <method ref="orderGenerator" method="generateFileName"/> </setHeader> <to id="initializerFolder" uri="file:work/in"/> </route> <!-- When this route is started, it will automatically create the work/jms/input directory where you can drop thefile that need to be processed. The <log/> elements are used to add human-friendly business logging statements. They make it easier to see what the route is doing. Files that are consumed from the work/jms/input directory, are then sent to the JMS queue incomingOrders on the ActiveMQ broker. --> <route id="file-to-jms-route"> <from id="incomingFolder" uri="file:work/in"/> <log id="logReceivingOrder" message="Receiving order ${file:name}"/> <to id="sendIncomingOrder" uri="activemq:incomingOrders"/> </route> <!-- This route consumes messages from the JMS queue incomingOrders on the ActiveMQ broker within the ESB. The <choice/> element contains the content based router. The two <when/> clauses use XPath to define the criteria for entering that part of the route. When the country in the XML message is set to UK or US, the file will be moved to a directory for that country. The <otherwise/> element ensures that any file that does not meet the requirements for either of the <when/> elements will be moved to the work/jms/output/others directory. --> <route id="jms-cbr-route" streamCache="true"> <from id="listenToIncomingOrder" uri="activemq:incomingOrders"/> <choice id="countrySelection"> <when id="UKCustomer"> <xpath id="_xpath1">/order:order/order:customer/order:country = 'UK'</xpath> <log id="logUK" message="Sending order ${file:name} to the UK"/> <to id="outputUKFolder" uri="file:work/out/uk"/> </when> <when id="USCustomer"> <xpath id="_xpath2">/order:order/order:customer/order:country = 'US'</xpath> <log id="logUS" message="Sending order ${file:name} to the US"/> <to id="outputUSFolder" uri="file:work/out/us"/> </when> <otherwise id="OtherCustomer"> <log id="logOtherCountry" message="Sending order ${file:name} to another country"/> <to id="outputOtherCountryFolder" uri="file:work/out/others"/> </otherwise> </choice> <log id="logEndProcessing" message="Done processing ${file:name}"/> </route> </camelContext> </beans>", "type: "="org.eclipse.lsp4e.diagnostic"}, {"lspDiagnostic"=Diagnostic [ range = Range [ start = Position [ line = 48 character = 13 ] end = Position [ line = 48 character = 22 ] ] severity = Error code = Either [ left = cvc-complex-type.4 right = null ] codeDescription = null source = "xml" message = "Attribute:\n - name\nis required in element:\n - setHeader\n\nCode:" tags = null relatedInformation = null data = null ], "severity"=2, "charStart"=2350, "languageServerId"="org.eclipse.wildwebdeveloper.xml", "Creation time: "=1623413595645L, "charEnd"=2359, "resource affected"="/jenkins/pullrequest-fuse-templates/editor/tests/org.fusesource.ide.projecttemplates.tests.integration/target/work sp@cé/FuseIntegrationProjectCreatorRunnableForAMQIT-AMQSpringProject-2.18.1.redhat-000026/src/main/resources/META-INF/spring/camel-context.xml", "message"="Attribute: - name is required in element: - setHeader Code:", "lineNumber"=49, "resource affected content"="<?xml version="1.0" encoding="UTF-8"?> <!-- Configures the Camel Context--> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation=" http://camel.apache.org/schema/spring https://camel.apache.org/schema/spring/camel-spring.xsd http://www.springframework.org/schema/beans https://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"> <bean id="orderGenerator" class="com.mycompany.templates.camel.activemq.OrderGenerator"/> <!-- Lets connect the Camel ActiveMQ component to the broker. --> <bean class="org.apache.activemq.ActiveMQConnectionFactory" id="activemq-connection-factory"> <property name="brokerURL" value="${broker.url}"/> <property name="userName" value="${broker.username}"/> <property name="password" value="${broker.password}"/> </bean> <bean class="org.apache.activemq.camel.component.ActiveMQComponent" id="activemq"> <property name="configuration"> <bean class="org.apache.activemq.camel.component.ActiveMQConfiguration"> <property name="connectionFactory" ref="activemq-connection-factory"/> </bean> </property> </bean> <!-- The namespace for the camelContext element in Blueprint is 'http://camel.apache.org/schema/blueprint'. Additionally, we can also define namespace prefixes we want to use them in the XPath expressions in our CBR. While it is not required to assign id's to the <camelContext/> and <route/> elements, it is a good idea to set those for runtime management purposes (logging, JMX MBeans, ...) --> <camelContext xmlns="http://camel.apache.org/schema/spring" xmlns:order="http://com.mycompany/examples/order" id="amq-example-context"> <!-- a route to generate a random order every 5th second --> <route id="generate-order"> <from id="timerToGenerateOrder" uri="timer:order?period=5000&delay=2000&fixedRate=true"/> <bean id="generatorOrder" ref="orderGenerator" method="generateOrder"/> <setHeader id="updateFileNameHeader" headerName="Exchange.FILE_NAME"> <method ref="orderGenerator" method="generateFileName"/> </setHeader> <to id="initializerFolder" uri="file:work/in"/> </route> <!-- When this route is started, it will automatically create the work/jms/input directory where you can drop thefile that need to be processed. The <log/> elements are used to add human-friendly business logging statements. They make it easier to see what the route is doing. Files that are consumed from the work/jms/input directory, are then sent to the JMS queue incomingOrders on the ActiveMQ broker. --> <route id="file-to-jms-route"> <from id="incomingFolder" uri="file:work/in"/> <log id="logReceivingOrder" message="Receiving order ${file:name}"/> <to id="sendIncomingOrder" uri="activemq:incomingOrders"/> </route> <!-- This route consumes messages from the JMS queue incomingOrders on the ActiveMQ broker within the ESB. The <choice/> element contains the content based router. The two <when/> clauses use XPath to define the criteria for entering that part of the route. When the country in the XML message is set to UK or US, the file will be moved to a directory for that country. The <otherwise/> element ensures that any file that does not meet the requirements for either of the <when/> elements will be moved to the work/jms/output/others directory. --> <route id="jms-cbr-route" streamCache="true"> <from id="listenToIncomingOrder" uri="activemq:incomingOrders"/> <choice id="countrySelection"> <when id="UKCustomer"> <xpath id="_xpath1">/order:order/order:customer/order:country = 'UK'</xpath> <log id="logUK" message="Sending order ${file:name} to the UK"/> <to id="outputUKFolder" uri="file:work/out/uk"/> </when> <when id="USCustomer"> <xpath id="_xpath2">/order:order/order:customer/order:country = 'US'</xpath> <log id="logUS" message="Sending order ${file:name} to the US"/> <to id="outputUSFolder" uri="file:work/out/us"/> </when> <otherwise id="OtherCustomer"> <log id="logOtherCountry" message="Sending order ${file:name} to another country"/> <to id="outputOtherCountryFolder" uri="file:work/out/others"/> </otherwise> </choice> <log id="logEndProcessing" message="Done processing ${file:name}"/> </route> </camelContext> </beans>", "type: "="org.eclipse.lsp4e.diagnostic"}]> Stacktrace java.lang.AssertionError: Expecting empty but was:<[{"lspDiagnostic"=Diagnostic [ range = Range [ start = Position [ line = 48 character = 49 ] end = Position [ line = 48 character = 59 ] ] severity = Error code = Either [ left = cvc-complex-type.3.2.2 right = null ] codeDescription = null source = "xml" message = "cvc-complex-type.3.2.2: Attribute 'headerName' is not allowed to appear in element 'setHeader'." tags = null relatedInformation = null data = null ], "severity"=2, "charStart"=2386, "languageServerId"="org.eclipse.wildwebdeveloper.xml", "Creation time: "=1623413595644L, "charEnd"=2396, "resource affected"="/jenkins/pullrequest-fuse-templates/editor/tests/org.fusesource.ide.projecttemplates.tests.integration/target/work sp@cé/FuseIntegrationProjectCreatorRunnableForAMQIT-AMQSpringProject-2.18.1.redhat-000026/src/main/resources/META-INF/spring/camel-context.xml", "message"="cvc-complex-type.3.2.2: Attribute 'headerName' is not allowed to appear in element 'setHeader'.", "lineNumber"=49, "resource affected content"="<?xml version="1.0" encoding="UTF-8"?> <!-- Configures the Camel Context--> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation=" http://camel.apache.org/schema/spring https://camel.apache.org/schema/spring/camel-spring.xsd http://www.springframework.org/schema/beans https://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"> <bean id="orderGenerator" class="com.mycompany.templates.camel.activemq.OrderGenerator"/> <!-- Lets connect the Camel ActiveMQ component to the broker. --> <bean class="org.apache.activemq.ActiveMQConnectionFactory" id="activemq-connection-factory"> <property name="brokerURL" value="${broker.url}"/> <property name="userName" value="${broker.username}"/> <property name="password" value="${broker.password}"/> </bean> <bean class="org.apache.activemq.camel.component.ActiveMQComponent" id="activemq"> <property name="configuration"> <bean class="org.apache.activemq.camel.component.ActiveMQConfiguration"> <property name="connectionFactory" ref="activemq-connection-factory"/> </bean> </property> </bean> <!-- The namespace for the camelContext element in Blueprint is 'http://camel.apache.org/schema/blueprint'. Additionally, we can also define namespace prefixes we want to use them in the XPath expressions in our CBR. While it is not required to assign id's to the <camelContext/> and <route/> elements, it is a good idea to set those for runtime management purposes (logging, JMX MBeans, ...) --> <camelContext xmlns="http://camel.apache.org/schema/spring" xmlns:order="http://com.mycompany/examples/order" id="amq-example-context"> <!-- a route to generate a random order every 5th second --> <route id="generate-order"> <from id="timerToGenerateOrder" uri="timer:order?period=5000&delay=2000&fixedRate=true"/> <bean id="generatorOrder" ref="orderGenerator" method="generateOrder"/> <setHeader id="updateFileNameHeader" headerName="Exchange.FILE_NAME"> <method ref="orderGenerator" method="generateFileName"/> </setHeader> <to id="initializerFolder" uri="file:work/in"/> </route> <!-- When this route is started, it will automatically create the work/jms/input directory where you can drop thefile that need to be processed. The <log/> elements are used to add human-friendly business logging statements. They make it easier to see what the route is doing. Files that are consumed from the work/jms/input directory, are then sent to the JMS queue incomingOrders on the ActiveMQ broker. --> <route id="file-to-jms-route"> <from id="incomingFolder" uri="file:work/in"/> <log id="logReceivingOrder" message="Receiving order ${file:name}"/> <to id="sendIncomingOrder" uri="activemq:incomingOrders"/> </route> <!-- This route consumes messages from the JMS queue incomingOrders on the ActiveMQ broker within the ESB. The <choice/> element contains the content based router. The two <when/> clauses use XPath to define the criteria for entering that part of the route. When the country in the XML message is set to UK or US, the file will be moved to a directory for that country. The <otherwise/> element ensures that any file that does not meet the requirements for either of the <when/> elements will be moved to the work/jms/output/others directory. --> <route id="jms-cbr-route" streamCache="true"> <from id="listenToIncomingOrder" uri="activemq:incomingOrders"/> <choice id="countrySelection"> <when id="UKCustomer"> <xpath id="_xpath1">/order:order/order:customer/order:country = 'UK'</xpath> <log id="logUK" message="Sending order ${file:name} to the UK"/> <to id="outputUKFolder" uri="file:work/out/uk"/> </when> <when id="USCustomer"> <xpath id="_xpath2">/order:order/order:customer/order:country = 'US'</xpath> <log id="logUS" message="Sending order ${file:name} to the US"/> <to id="outputUSFolder" uri="file:work/out/us"/> </when> <otherwise id="OtherCustomer"> <log id="logOtherCountry" message="Sending order ${file:name} to another country"/> <to id="outputOtherCountryFolder" uri="file:work/out/others"/> </otherwise> </choice> <log id="logEndProcessing" message="Done processing ${file:name}"/> </route> </camelContext> </beans>", "type: "="org.eclipse.lsp4e.diagnostic"}, {"lspDiagnostic"=Diagnostic [ range = Range [ start = Position [ line = 48 character = 13 ] end = Position [ line = 48 character = 22 ] ] severity = Error code = Either [ left = cvc-complex-type.4 right = null ] codeDescription = null source = "xml" message = "Attribute:\n - name\nis required in element:\n - setHeader\n\nCode:" tags = null relatedInformation = null data = null ], "severity"=2, "charStart"=2350, "languageServerId"="org.eclipse.wildwebdeveloper.xml", "Creation time: "=1623413595645L, "charEnd"=2359, "resource affected"="/jenkins/pullrequest-fuse-templates/editor/tests/org.fusesource.ide.projecttemplates.tests.integration/target/work sp@cé/FuseIntegrationProjectCreatorRunnableForAMQIT-AMQSpringProject-2.18.1.redhat-000026/src/main/resources/META-INF/spring/camel-context.xml", "message"="Attribute: - name is required in element: - setHeader Code:", "lineNumber"=49, "resource affected content"="<?xml version="1.0" encoding="UTF-8"?> <!-- Configures the Camel Context--> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation=" http://camel.apache.org/schema/spring https://camel.apache.org/schema/spring/camel-spring.xsd http://www.springframework.org/schema/beans https://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"> <bean id="orderGenerator" class="com.mycompany.templates.camel.activemq.OrderGenerator"/> <!-- Lets connect the Camel ActiveMQ component to the broker. --> <bean class="org.apache.activemq.ActiveMQConnectionFactory" id="activemq-connection-factory"> <property name="brokerURL" value="${broker.url}"/> <property name="userName" value="${broker.username}"/> <property name="password" value="${broker.password}"/> </bean> <bean class="org.apache.activemq.camel.component.ActiveMQComponent" id="activemq"> <property name="configuration"> <bean class="org.apache.activemq.camel.component.ActiveMQConfiguration"> <property name="connectionFactory" ref="activemq-connection-factory"/> </bean> </property> </bean> <!-- The namespace for the camelContext element in Blueprint is 'http://camel.apache.org/schema/blueprint'. Additionally, we can also define namespace prefixes we want to use them in the XPath expressions in our CBR. While it is not required to assign id's to the <camelContext/> and <route/> elements, it is a good idea to set those for runtime management purposes (logging, JMX MBeans, ...) --> <camelContext xmlns="http://camel.apache.org/schema/spring" xmlns:order="http://com.mycompany/examples/order" id="amq-example-context"> <!-- a route to generate a random order every 5th second --> <route id="generate-order"> <from id="timerToGenerateOrder" uri="timer:order?period=5000&delay=2000&fixedRate=true"/> <bean id="generatorOrder" ref="orderGenerator" method="generateOrder"/> <setHeader id="updateFileNameHeader" headerName="Exchange.FILE_NAME"> <method ref="orderGenerator" method="generateFileName"/> </setHeader> <to id="initializerFolder" uri="file:work/in"/> </route> <!-- When this route is started, it will automatically create the work/jms/input directory where you can drop thefile that need to be processed. The <log/> elements are used to add human-friendly business logging statements. They make it easier to see what the route is doing. Files that are consumed from the work/jms/input directory, are then sent to the JMS queue incomingOrders on the ActiveMQ broker. --> <route id="file-to-jms-route"> <from id="incomingFolder" uri="file:work/in"/> <log id="logReceivingOrder" message="Receiving order ${file:name}"/> <to id="sendIncomingOrder" uri="activemq:incomingOrders"/> </route> <!-- This route consumes messages from the JMS queue incomingOrders on the ActiveMQ broker within the ESB. The <choice/> element contains the content based router. The two <when/> clauses use XPath to define the criteria for entering that part of the route. When the country in the XML message is set to UK or US, the file will be moved to a directory for that country. The <otherwise/> element ensures that any file that does not meet the requirements for either of the <when/> elements will be moved to the work/jms/output/others directory. --> <route id="jms-cbr-route" streamCache="true"> <from id="listenToIncomingOrder" uri="activemq:incomingOrders"/> <choice id="countrySelection"> <when id="UKCustomer"> <xpath id="_xpath1">/order:order/order:customer/order:country = 'UK'</xpath> <log id="logUK" message="Sending order ${file:name} to the UK"/> <to id="outputUKFolder" uri="file:work/out/uk"/> </when> <when id="USCustomer"> <xpath id="_xpath2">/order:order/order:customer/order:country = 'US'</xpath> <log id="logUS" message="Sending order ${file:name} to the US"/> <to id="outputUSFolder" uri="file:work/out/us"/> </when> <otherwise id="OtherCustomer"> <log id="logOtherCountry" message="Sending order ${file:name} to another country"/> <to id="outputOtherCountryFolder" uri="file:work/out/others"/> </otherwise> </choice> <log id="logEndProcessing" message="Done processing ${file:name}"/> </route> </camelContext> </beans>", "type: "="org.eclipse.lsp4e.diagnostic"}]>
it seems like "latest" xsd has been updated and is no more compatible with Fuse 7.x.
Potential solutions:
- specify a specific version of Camel xsd in templates 'like the latest one used for Fuse). This is the uglier but easiest solution and more accurate anyway than current state which is using 3.x xsds for 2.x based templates
- ask for a 2.x "latest" stream and use this one in template
- have a mechanism to detect the exact xsd version correspondign to Camel version and set it
- is related to
-
ENTESB-16790 Update all productized xml examples to use a correct xsd
- Done
- relates to
-
FUSETOOLS-3478 Missing 'ref' value in Camel Editor content assistant for camel component
- Closed