release version 1.10.0

This commit is contained in:
2024-12-14 04:07:49 +03:00
parent a5088587f7
commit c6b3d793c4
1916 changed files with 254306 additions and 0 deletions

View File

@ -0,0 +1,51 @@
{
"factory": {
"id": "uniform-active-exchange-connector-in",
"type": "entaxy.runtime.connector",
"displayName": "UNIFORM :: ACTIVE :: IN",
"parent": "abstract-service-soap-connector-in",
"description": "Factory Uniform active exchange soap-connector-in of entaxy.runtime.connector",
"isAbstract": false
},
"entaxy.runtime.connector": {
"type": "uniform-active-exchange",
"protocol": "uniform-active-exchange"
},
"fields": {
"period": {
"displayName": "Period",
"description": "Period",
"type": "String",
"required": true,
"group": "entaxy"
},
"endpointUrl": {
"displayName": "Endpoint Url",
"description": "Endpoint Url",
"type": "String",
"required": true,
"group": "entaxy"
}
},
"outputs": {
"init": {
"isDefault": true,
"fields": {
"generateLoggingKey": {
"isHidden": false
},
"period": {},
"endpointUrl": {}
},
"config": {
"configurable": true,
"fieldsConfigurableByDefault": true,
"configurableFields": {
"includeNames":["endpointUrl","period"],
"includePatterns":[]
}
}
}
}
}

View File

@ -0,0 +1,39 @@
{
"factory": {
"id": "uniform-active-exchange-connector-out",
"type": "entaxy.runtime.connector",
"displayName": "UNIFORM :: ACTIVE :: OUT",
"parent": "abstract-connector-out",
"description": "Uniform active exchange OUT-connector (producer) factory",
"isAbstract": false
},
"entaxy.runtime.connector": {
"type": "uniform-active-exchange",
"protocol": "uniform-active-exchange"
},
"fields": {
"endpointUrl": {
"displayName": "Endpoint Url",
"description": "Endpoint Url",
"type": "String",
"required": true,
"group": "entaxy"
}
},
"outputs": {
"init": {
"isDefault": true,
"fields": {
"endpointUrl": {}
},
"config": {
"configurable": true,
"fieldsConfigurableByDefault": true,
"configurableFields": {
"includeNames":["endpointUrl"],
"includePatterns":[]
}
}
}
}
}

View File

@ -0,0 +1,25 @@
{
"factory": {
"id": "uniform-passive-exchange-connector-in",
"type": "entaxy.runtime.connector",
"displayName": "UNIFORM :: PASSIVE :: IN",
"parent": "abstract-service-soap-connector-in",
"description": "Factory Uniform passive exchange soap-connector-in of entaxy.runtime.connector",
"isAbstract": false
},
"entaxy.runtime.connector": {
"type": "uniform-passive-exchange",
"protocol": "uniform-passive-exchange"
},
"fields": {
},
"outputs": {
"init": {
"isDefault": true,
"config": {
"configurable": false
}
}
}
}

View File

@ -0,0 +1,24 @@
{
"factory": {
"id": "uniform-passive-exchange-connector-out",
"type": "entaxy.runtime.connector",
"displayName": "UNIFORM :: PASSIVE :: OUT",
"parent": "abstract-connector-out",
"description": "Uniform passive exchange OUT-connector (producer) factory",
"isAbstract": false
},
"entaxy.runtime.connector": {
"type": "uniform-passive-exchange",
"protocol": "uniform-passive-exchange"
},
"fields": {
},
"outputs": {
"init": {
"isDefault": true,
"config": {
"configurable": false
}
}
}
}

View File

@ -0,0 +1,423 @@
[#ftl attributes={"generated.type":"blueprint"}]
<?xml version="1.0" encoding="UTF-8"?>
<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:soap-type="http://www.entaxy.ru/ExchangeTypes/1.0"
xsi:schemaLocation="http://www.osgi.org/xmlns/blueprint/v1.0.0 https://www.osgi.org/xmlns/blueprint/v1.0.0/blueprint.xsd">
[#import "templates:object-commons/common-utils.ftl" as utils]
<reference id="entaxy-broker" interface="org.apache.camel.Component"
filter="(connection.name=entaxy-broker)"/>
<bean id="forced" class="java.lang.IllegalArgumentException">
<argument index="0" value="Content is invalid"/>
</bean>
<bean id="headersConverter" class="ru.entaxy.esb.system.common.util.HeadersConverter">
<property name="namespace" value="http://www.entaxy.ru/ExchangeTypes/1.0"/>
<property name="customHeaders" value="NTX_CustomHeaders"/>
<property name="customHeaderPrefix" value="NTX_UNIFORM_EXCHANGE_CustomHeader"/>
</bean>
<camelContext id="[=objectId]" xmlns="http://camel.apache.org/schema/blueprint">
<route id="[=objectId].uniform-service-active-in-connector">
<from uri="timer://get-package?synchronous=true&amp;period=[=utils.convertConfigValue(properties.period)]"/>
<setHeader name="NTX_SystemId">
<constant>[=properties.profile]</constant>
</setHeader>
<setHeader name="ENTAXY_SystemEndpoint">
<constant>[=utils.convertConfigValue(properties.endpointUrl)]</constant>
</setHeader>
<setProperty name="sender">
<simple>[=properties.profile]</simple>
</setProperty>
<setProperty name="service">
<constant>uniform-service-active</constant>
</setProperty>
<setProperty name="operation">
<simple>GET</simple>
</setProperty>
[#if properties.generateLoggingKey?? && properties.generateLoggingKey]
<to uri="direct-vm:fill-logging-key"/>
[/#if]
<log message="${headers.NTX_loggingKey} Timer for uniform exchange active-in started" loggingLevel="DEBUG"/>
<to uri="direct:uniform-service-connector-get-package-active?block=true&amp;timeout=60000"/>
</route>
<!--In-->
<route id="[=objectId].get-package-active" streamCache="true">
<from uri="direct:uniform-service-connector-get-package-active"/>
<when>
<simple>${headers.ENTAXY_SystemEndpoint} == null || ${headers.NTX_SystemId} == null</simple>
<log message="${headers.NTX_loggingKey} ENTAXY_SystemEndpoint is not set" loggingLevel="ERROR"/>
<stop/>
</when>
<setHeader name="SystemHasMessages">
<constant>true</constant>
</setHeader>
<setHeader name="operationNamespace">
<constant>http://www.entaxy.ru/connector/universal/system/1.0</constant>
</setHeader>
<setHeader name="CamelDestinationOverrideUrl">
<simple>${headers.ENTAXY_SystemEndpoint}</simple>
</setHeader>
<loop doWhile="true" copy="true">
<simple resultType="Boolean">${headers.SystemHasMessages} == 'true'</simple>
<to uri="direct:get-package"/>
</loop>
</route>
<route id="[=objectId].direct:get-package">
<from uri="direct:get-package"/>
<setHeader name="NTX_BusUUID">
<constant>FFFFFFFF-FFFF-FFFF-FFFF-FFFFFFFFFFFF</constant>
</setHeader>
<setHeader name="ENTAXY_Destination">
<constant></constant>
</setHeader>
<to uri="xslt:ru/entaxy/esb/platform/runtime/modules/uniform-service/xslt/GetPacketRequest.xsl?failOnNullBody=false"/>
<removeHeader headerName="NTX_BusUUID"/>
<removeHeader headerName="ENTAXY_Destination"/>
<setHeader name="operationName">
<constant>GetPackets</constant>
</setHeader>
<to uri="direct-vm:uniform-service-send-package-active"/>
<removeHeader headerName="SOAPAction"/>
<setBody>
<xpath>//soap-type:response/soap-type:packets</xpath>
</setBody>
<choice>
<when>
<xpath>//soap-type:packets/soap-type:packet[1]/soap-type:message/soap-type:content/node()
</xpath>
<setBody>
<xpath>//soap-type:packets/soap-type:packet[1]</xpath>
</setBody>
<to uri="entaxy-broker:queue:entaxy.uniform.service.exchange.send.to.profile?exchangePattern=InOnly"/>
<setHeader name="NTX_UUID">
<simple>${headers.ENTAXY_MessageUUID}</simple>
</setHeader>
<to uri="xslt:ru/entaxy/esb/platform/runtime/modules/uniform-service/xslt/ConfirmGettingPacketRequest.xsl?failOnNullBody=false"/>
<setHeader name="operationName">
<constant>ConfirmGettingPackets</constant>
</setHeader>
<to uri="direct-vm:uniform-service-send-package-active"/>
<removeHeader headerName="SOAPAction"/>
<when>
<xpath>not(//soap-type:status/text() = '200')</xpath>
<log message="${headers.NTX_loggingKey} ConfirmGettingPacket fail" loggingLevel="ERROR"/>
<!-- TODO что делать с сообщением в очереди ? -->
</when>
<setHeader name="SystemHasMessages">
<constant>true</constant>
</setHeader>
</when>
<otherwise>
<setHeader name="SystemHasMessages">
<constant>false</constant>
</setHeader>
<log message="${headers.NTX_loggingKey} System ${headers.NTX_SystemId} does not have messages" loggingLevel="INFO"/>
</otherwise>
</choice>
</route>
<route id="[=objectId].soap-send-to-profile">
<from uri="entaxy-broker:queue:entaxy.uniform.service.exchange.send.to.profile"/>
<setHeader name="ENTAXY_MessageUUID">
<xpath resultType="String">//soap-type:packet/soap-type:message/soap-type:messageUUID/text()</xpath>
</setHeader>
<setHeader name="ENTAXY_Destination">
<xpath resultType="String">
//soap-type:packet/soap-type:header/soap-type:destination/soap-type:id/text()
</xpath>
</setHeader>
<setHeader name="ENTAXY_DestinationType">
<xpath resultType="String">
//soap-type:packet/soap-type:header/soap-type:destination/soap-type:type/text()
</xpath>
</setHeader>
<setHeader name="ENTAXY_Source">
<xpath resultType="String">//soap-type:packet/soap-type:message/soap-type:source/soap-type:id/text()
</xpath>
</setHeader>
<setHeader name="ENTAXY_SourceType">
<xpath resultType="String">//soap-type:packet/soap-type:message/soap-type:source/soap-type:type/text()
</xpath>
</setHeader>
<choice>
<when>
<simple>${headers.ENTAXY_Source} == ''</simple>
<setHeader name="ENTAXY_Source">
<simple>${headers.X-SystemName}</simple>
</setHeader>
</when>
<when>
<simple>${headers.NTX_SystemId} != ${headers.ENTAXY_Source}</simple>
<log message="${headers.NTX_loggingKey} Source name header and SystemId is not equals!" loggingLevel="WARN"/>
</when>
</choice>
<setHeader name="ENTAXY_MessageType">
<xpath resultType="String">//soap-type:packet/soap-type:message/soap-type:messageType/text()</xpath>
</setHeader>
<setHeader name="ENTAXY_Priority">
<xpath resultType="Integer">//soap-type:packet/soap-type:message/soap-type:priority/text()</xpath>
</setHeader>
<setHeader name="ENTAXY_ExchangePattern">
<xpath resultType="String">/soap-type:packet/soap-type:message/soap-type:exchangePattern/text()
</xpath>
</setHeader>
<choice>
<when>
<simple>${headers.ENTAXY_ExchangePattern} == 'InOut'</simple>
<setExchangePattern pattern="InOut"/>
</when>
<otherwise>
<setExchangePattern pattern="InOnly"/>
</otherwise>
</choice>
<when>
<simple>${headers.ENTAXY_Priority} == null || ${headers.ENTAXY_Priority} == ""</simple>
<setHeader name="ENTAXY_Priority">
<simple resultType="Integer">4</simple>
</setHeader>
</when>
<setHeader name="NTX_CustomHeaders">
<xpath>//soap-type:packet/soap-type:message/soap-type:customHeader</xpath>
</setHeader>
<to uri="direct:get-content-and-content-type"/>
<when>
<simple>${body} == null</simple>
<log message="${headers.NTX_loggingKey} Content is invalid" loggingLevel="ERROR"/>
<throwException ref="forced"/>
</when>
<removeHeaders pattern="*" excludePattern="NTX_.+|CamelJms.+|ENTAXY_.+"/>
<to uri="direct:exit-cascade-start" />
</route>
<route id="[=objectId].send-packets">
<from uri="direct:send-packets"/>
<setHeader name="NTX_UNIFORM_EXCHANGE_PacketCount">
<xpath resultType="Integer">count(/soap-type:packets/soap-type:packet)</xpath>
</setHeader>
<when>
<simple>${headers.NTX_UNIFORM_EXCHANGE_PacketCount} &gt; 1</simple>
<throwException exceptionType="java.lang.UnsupportedOperationException"
message="Not supported more then 1 packet"/>
</when>
<setBody>
<xpath resultType="org.w3c.dom.Document">/soap-type:packets/soap-type:packet[1]</xpath>
</setBody>
<setHeader name="ENTAXY_MessageUUID">
<xpath resultType="String">/soap-type:packet/soap-type:message/soap-type:messageUUID/text()</xpath>
</setHeader>
<choice>
<when>
<simple>${headers.ENTAXY_MessageUUID} == "00000000-0000-0000-0000-000000000000"</simple>
[#-- health check --]
<removeHeaders pattern="ENTAXY_.+|NTX_.+|X-.+"/>
<setBody>
<simple><![CDATA[
<test/>
]]>
</simple>
</setBody>
<to uri="xslt:ru/entaxy/esb/platform/runtime/modules/uniform-service/xslt/PutPacketResponse.xsl?failOnNullBody=false"/>
</when>
<otherwise>
<setHeader name="ENTAXY_Destination">
<xpath resultType="String">
/soap-type:packet/soap-type:header/soap-type:destination/soap-type:id/text()
</xpath>
</setHeader>
<setHeader name="ENTAXY_DestinationType">
<xpath resultType="String">
/soap-type:packet/soap-type:header/soap-type:destination/soap-type:type/text()
</xpath>
</setHeader>
<log message="${headers.NTX_loggingKey} Receive message ${headers.ENTAXY_MessageUUID} for ${headers.ENTAXY_Destination}"
loggingLevel="INFO"/>
<setHeader name="ENTAXY_Source">
<xpath resultType="String">
/soap-type:packet/soap-type:message/soap-type:source/soap-type:id/text()
</xpath>
</setHeader>
<setHeader name="ENTAXY_SourceType">
<xpath resultType="String">
/soap-type:packet/soap-type:message/soap-type:source/soap-type:type/text()
</xpath>
</setHeader>
<when>
<simple>${headers.X-SystemName} != ${headers.ENTAXY_Source}</simple>
<log message="${headers.NTX_loggingKey} Source name header and auth username is not equals!" loggingLevel="WARN"/>
<when>
<simple>${headers.ENTAXY_Source} == ''</simple>
<setHeader name="ENTAXY_Source">
<simple>${headers.X-SystemName}</simple>
</setHeader>
</when>
</when>
<setHeader name="ENTAXY_MessageType">
<xpath resultType="String">/soap-type:packet/soap-type:message/soap-type:messageType/text()
</xpath>
</setHeader>
<setHeader name="ENTAXY_Priority">
<xpath resultType="Integer">/soap-type:packet/soap-type:message/soap-type:priority/text()
</xpath>
</setHeader>
<setHeader name="ENTAXY_ExchangePattern">
<xpath resultType="String">/soap-type:packet/soap-type:message/soap-type:exchangePattern/text()
</xpath>
</setHeader>
<choice>
<when>
<simple>${headers.ENTAXY_ExchangePattern} == 'InOut'</simple>
<setExchangePattern pattern="InOut"/>
</when>
<otherwise>
<setExchangePattern pattern="InOnly"/>
</otherwise>
</choice>
<setHeader name="NTX_CustomHeaders">
<xpath>/soap-type:packet/soap-type:message/soap-type:customHeader</xpath>
</setHeader>
<bean ref="headersConverter" method="xml2Json"/>
<log message="${headers.NTX_loggingKey} Headers converted: ${headers}" loggingLevel="DEBUG"/>
<to uri="direct:get-content-and-content-type"/>
<when>
<simple>${body} == null</simple>
<log message="${headers.NTX_loggingKey} Content is invalid" loggingLevel="ERROR"/>
<throwException ref="forced"/>
</when>
<removeHeaders pattern="*" excludePattern="NTX_.+|CamelJms.+|ENTAXY_.+|X-.+"/>
<to uri="direct:exit-cascade-start" />
<removeHeaders pattern="ENTAXY_.+|NTX_.+|X-.+"/>
<setBody>
<simple><![CDATA[
<test/>
]]>
</simple>
</setBody>
<to uri="xslt:ru/entaxy/esb/platform/runtime/modules/uniform-service/xslt/PutPacketResponse.xsl?failOnNullBody=false"/>
</otherwise>
</choice>
</route>
<route id="[=objectId].get-content-and-content-type">
<from uri="direct:get-content-and-content-type"/>
<setHeader name="ENTAXY_ContentType">
<xpath resultType="String">/soap-type:packet/soap-type:message/soap-type:contentType/text()
</xpath>
</setHeader>
<choice>
<when>
<xpath>count(/soap-type:packet/soap-type:message/soap-type:content) = 1</xpath>
<setHeader name="CamelJms_IntContentXsiType">
<xpath resultType="String">
/soap-type:packet/soap-type:message/soap-type:content/@xsi:type
</xpath>
</setHeader>
<setHeader name="NTX_ContentHasNotEmptyText">
<xpath resultType="Boolean">
boolean(normalize-space(/soap-type:packet/soap-type:message/soap-type:content/text()))
</xpath>
</setHeader>
<setHeader name="NTX_ContentChildNodesCount">
<xpath resultType="Integer">
count(/soap-type:packet/soap-type:message/soap-type:content/child::*)
</xpath>
</setHeader>
<choice>
<when>
<simple>${headers.NTX_ContentChildNodesCount} == 1</simple>
<setBody>
<xpath resultType="org.w3c.dom.Document">
/soap-type:packet/soap-type:message/soap-type:content/*
</xpath>
</setBody>
<setHeader name="CamelJms_IntMessageType">
<constant>Document</constant>
</setHeader>
</when>
<when>
<simple>${headers.NTX_ContentChildNodesCount} > 1</simple>
<setBody>
<xpath resultType="org.w3c.dom.NodeList">
/soap-type:packet/soap-type:message/soap-type:content/*
</xpath>
</setBody>
<setHeader name="CamelJms_IntMessageType">
<constant>NodeList</constant>
</setHeader>
</when>
<when>
<simple>${headers.NTX_ContentChildNodesCount} == 0</simple>
<choice>
<when>
<simple>${headers.NTX_ContentHasNotEmptyText}</simple>
<setBody>
<xpath resultType="String">
/soap-type:packet/soap-type:message/soap-type:content/text()
</xpath>
</setBody>
<setHeader name="CamelJms_IntMessageType">
<constant>String</constant>
</setHeader>
</when>
<otherwise>
<setBody>
<constant>
<![CDATA[
<emptyContent xmlns="http://www.entaxy.ru/connector/universal/internal"/>
]]>
</constant>
</setBody>
</otherwise>
</choice>
</when>
<otherwise>
<log message="${headers.NTX_loggingKey} Content is invalid" loggingLevel="ERROR"/>
<throwException ref="forced"/>
</otherwise>
</choice>
<removeHeader headerName="NTX_ContentHasNotEmptyText"/>
<removeHeader headerName="NTX_ContentChildNodesCount"/>
</when>
<otherwise>
<setBody>
<constant>
<![CDATA[
<empty xmlns="http://www.entaxy.ru/connector/universal/internal"/>
]]>
</constant>
</setBody>
</otherwise>
</choice>
</route>
</camelContext>
</blueprint>

View File

@ -0,0 +1,103 @@
[#ftl attributes={"generated.type":"blueprint"}]
<?xml version="1.0" encoding="UTF-8"?>
<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:soap-type="http://www.entaxy.ru/ExchangeTypes/1.0"
xsi:schemaLocation="http://www.osgi.org/xmlns/blueprint/v1.0.0 https://www.osgi.org/xmlns/blueprint/v1.0.0/blueprint.xsd">
[#import "templates:object-commons/common-utils.ftl" as utils]
<reference id="entaxy-broker" interface="org.apache.camel.Component"
filter="(connection.name=entaxy-broker)"/>
<bean id="uuidGenerator" class="java.util.UUID" scope="prototype" factory-method="randomUUID"/>
<bean id="headerMergeAggregator" class="ru.entaxy.esb.system.common.aggregation.HeaderMergeAggregatorImpl"/>
<bean id="headersConverter" class="ru.entaxy.esb.system.common.util.HeadersConverter">
<property name="namespace" value="http://www.entaxy.ru/ExchangeTypes/1.0"/>
<property name="customHeaders" value="NTX_CustomHeaders"/>
<property name="customHeaderPrefix" value="NTX_UNIFORM_EXCHANGE_CustomHeader"/>
</bean>
<camelContext id="[=objectId]" xmlns="http://camel.apache.org/schema/blueprint">
<route id="[=objectId].output-route">
<from uri="direct:entry-cascade-finish"/>
<when>
<simple>${headers.ENTAXY_Priority} == null || ${headers.ENTAXY_Priority} == ""</simple>
<setHeader name="ENTAXY_Priority">
<simple resultType="Integer">4</simple>
</setHeader>
</when>
<setHeader name="NTX_OutQueue">
<simple>entaxy.uniform.service.exchange.active.[=properties.profile]</simple>
</setHeader>
<removeHeaders pattern="X-.+"/>
<log message="${headers.NTX_loggingKey} Message sent to broker to queue:${headers.NTX_OutQueue}"
loggingLevel="INFO"/>
<log message="${headers.NTX_loggingKey} Body is: ${body}" loggingLevel="TRACE"/>
<toD uri="entaxy-broker:queue:${headers.NTX_OutQueue}?priority=${headers.ENTAXY_Priority}"/>
</route>
<route id="[=objectId].soap-out-active-connector" streamCache="true">
<from uri="entaxy-broker:queue:entaxy.uniform.service.exchange.active.[=properties.profile]"/>
<log message="${headers.NTX_loggingKey} Message ${headers} send to system" loggingLevel="TRACE"/>
<setHeader name="NTX_SystemId">
<constant>[=properties.profile]</constant>
</setHeader>
<setHeader name="ENTAXY_SystemEndpoint">
<constant>[=utils.convertConfigValue(properties.endpointUrl)]</constant>
</setHeader>
<log message="${headers.NTX_loggingKey} ACTIVE-CONSUMER: Message for system ${headers.NTX_SystemId} to ${headers.ENTAXY_SystemEndpoint}"
loggingLevel="DEBUG"/>
<when>
<simple>${headers.ENTAXY_SystemEndpoint} == null || ${headers.NTX_SystemId} == null</simple>
<log message="${headers.NTX_loggingKey} ENTAXY_SystemEndpoint for ${headers.NTX_SystemId} is not set"
loggingLevel="ERROR"/>
<stop/>
</when>
<bean ref="headersConverter" method="json2xml"/>
<setHeader name="NTX_OutQueue">
<simple>entaxy.uniform.service.exchange.active.[=properties.profile]</simple>
</setHeader>
<setHeader name="ENTAXY_AcknowledgeMsgID">
<simple>${bean:uuidGenerator.toString}</simple>
</setHeader>
<to uri="direct-vm:uniform-service-common-save-acknowledge?block=true&amp;timeout=70000"/>
<setBody>
<simple><![CDATA[
<body>${body}</body>
]]>
</simple>
</setBody>
<to uri="xslt:ru/entaxy/esb/platform/runtime/modules/uniform-service/xslt/PutPacketRequest.xsl"/>
<setHeader name="operationNamespace">
<constant>http://www.entaxy.ru/connector/universal/system/1.0</constant>
</setHeader>
<setHeader name="operationName">
<constant>PutPackets</constant>
</setHeader>
<setHeader name="CamelDestinationOverrideUrl">
<simple>${headers.ENTAXY_SystemEndpoint}</simple>
</setHeader>
<to uri="direct-vm:uniform-service-send-package-active"/>
<choice>
<when>
<xpath>not(//soap-type:status/text() = '200')</xpath>
<log message="${headers.NTX_loggingKey} PutPackets fail" loggingLevel="ERROR"/>
</when>
<otherwise>
<setHeader name="NTX_AckMessage">
<simple>true</simple>
</setHeader>
<to uri="entaxy-broker:queue:entaxy.uniform.service.exchange.aggregate?exchangePattern=InOnly&amp;asyncConsumer=true"/>
</otherwise>
</choice>
</route>
</camelContext>
</blueprint>

View File

@ -0,0 +1,265 @@
[#ftl attributes={"generated.type":"blueprint"}]
<?xml version="1.0" encoding="UTF-8"?>
<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:soap-type="http://www.entaxy.ru/ExchangeTypes/1.0"
xsi:schemaLocation="http://www.osgi.org/xmlns/blueprint/v1.0.0 https://www.osgi.org/xmlns/blueprint/v1.0.0/blueprint.xsd">
[#import "templates:object-commons/common-utils.ftl" as utils]
<bean id="uniform-service-exchange-connector-info" class="ru.entaxy.platform.services.runtime.impl.EntaxyServiceConnectorInfoImpl">
<property name="serviceId" value="uniform-service" />
<property name="profileId" value="[=properties.profile]" />
<property name="direction" value="in" />
<property name="endpoint" value="direct-vm:[=objectId]-uniform-service-exchange.entry-point" />
</bean>
<service activation="eager" interface="ru.entaxy.platform.services.runtime.EntaxyServiceConnectorInfo"
ref="uniform-service-exchange-connector-info">
<service-properties>
<entry key="profile" value="[=properties.profile]"/>
<entry key="service" value="uniform-service-in"/>
<entry key="direction" value="in"/>
</service-properties>
</service>
<bean id="forced" class="java.lang.IllegalArgumentException">
<argument index="0" value="Content is invalid"/>
</bean>
<bean id="headersConverter" class="ru.entaxy.esb.system.common.util.HeadersConverter">
<property name="namespace" value="http://www.entaxy.ru/ExchangeTypes/1.0"/>
<property name="customHeaders" value="NTX_CustomHeaders"/>
<property name="customHeaderPrefix" value="NTX_UNIFORM_EXCHANGE_CustomHeader"/>
</bean>
<camelContext id="[=objectId]" xmlns="http://camel.apache.org/schema/blueprint">
<globalOptions>
<globalOption key="CamelLogEipName" value="ru.entaxy.esb.uniform.exchange.passive.in.[=properties.profile]"/>
</globalOptions>
<route id="[=objectId].uniform-service-exchange.input-route">
<from uri="direct-vm:[=objectId]-uniform-service-exchange.entry-point" />
<log message="${headers.NTX_loggingKey} Body is ${body}" loggingLevel="TRACE"/>
<to uri="direct:send-packets"/>
</route>
<route id="[=objectId].send-packets">
<from uri="direct:send-packets"/>
<setHeader name="NTX_UNIFORM_EXCHANGE_PacketCount">
<xpath resultType="Integer">count(/soap-type:packets/soap-type:packet)</xpath>
</setHeader>
<when>
<simple>${headers.NTX_UNIFORM_EXCHANGE_PacketCount} &gt; 1</simple>
<throwException exceptionType="java.lang.UnsupportedOperationException"
message="Not supported more then 1 packet"/>
</when>
<setBody>
<xpath resultType="org.w3c.dom.Document">/soap-type:packets/soap-type:packet[1]</xpath>
</setBody>
<setHeader name="ENTAXY_MessageUUID">
<xpath resultType="String">/soap-type:packet/soap-type:message/soap-type:messageUUID/text()</xpath>
</setHeader>
<when>
<simple>${headers.ENTAXY_generateLoggingKey}</simple>
<to uri="direct-vm:fill-logging-key"/>
</when>
<log message="${headers.NTX_loggingKey} Message-id is ${headers.ENTAXY_MessageUUID}" loggingLevel="INFO"/>
<choice>
<when>
<simple>${headers.ENTAXY_MessageUUID} == "00000000-0000-0000-0000-000000000000"</simple>
[#-- health check --]
<removeHeaders pattern="ENTAXY_.+|NTX_.+|X-.+"/>
<setBody>
<simple><![CDATA[
<test/>
]]>
</simple>
</setBody>
<to uri="xslt:ru/entaxy/esb/platform/runtime/modules/uniform-service/xslt/PutPacketResponse.xsl?failOnNullBody=false"/>
</when>
<otherwise>
<setHeader name="ENTAXY_Destination">
<xpath resultType="String">
/soap-type:packet/soap-type:header/soap-type:destination/soap-type:id/text()
</xpath>
</setHeader>
<setHeader name="ENTAXY_DestinationType">
<xpath resultType="String">
/soap-type:packet/soap-type:header/soap-type:destination/soap-type:type/text()
</xpath>
</setHeader>
<log message="${headers.NTX_loggingKey} Receive message ${headers.ENTAXY_MessageUUID} for ${headers.ENTAXY_Destination}"
loggingLevel="INFO"/>
<setHeader name="ENTAXY_Source">
<xpath resultType="String">
/soap-type:packet/soap-type:message/soap-type:source/soap-type:id/text()
</xpath>
</setHeader>
<setHeader name="ENTAXY_SourceType">
<xpath resultType="String">
/soap-type:packet/soap-type:message/soap-type:source/soap-type:type/text()
</xpath>
</setHeader>
<when>
<simple>${headers.X-SystemName} != ${headers.ENTAXY_Source}</simple>
<log message="${headers.NTX_loggingKey} Source name header and auth username is not equals!" loggingLevel="WARN"/>
<when>
<simple>${headers.ENTAXY_Source} == ''</simple>
<setHeader name="ENTAXY_Source">
<simple>${headers.X-SystemName}</simple>
</setHeader>
</when>
</when>
<setHeader name="ENTAXY_MessageType">
<xpath resultType="String">/soap-type:packet/soap-type:message/soap-type:messageType/text()
</xpath>
</setHeader>
<setHeader name="ENTAXY_Priority">
<xpath resultType="Integer">/soap-type:packet/soap-type:message/soap-type:priority/text()
</xpath>
</setHeader>
<setHeader name="ENTAXY_ExchangePattern">
<xpath resultType="String">/soap-type:packet/soap-type:message/soap-type:exchangePattern/text()
</xpath>
</setHeader>
<choice>
<when>
<simple>${headers.ENTAXY_ExchangePattern} == 'InOut'</simple>
<setExchangePattern pattern="InOut"/>
</when>
<otherwise>
<setExchangePattern pattern="InOnly"/>
</otherwise>
</choice>
<setHeader name="NTX_CustomHeaders">
<xpath>/soap-type:packet/soap-type:message/soap-type:customHeader</xpath>
</setHeader>
<bean ref="headersConverter" method="xml2Json"/>
<log message="${headers.NTX_loggingKey} Headers converted: ${headers}" loggingLevel="DEBUG"/>
<to uri="direct:get-content-and-content-type"/>
<when>
<simple>${body} == null</simple>
<log message="${headers.NTX_loggingKey} Content is invalid" loggingLevel="ERROR"/>
<throwException ref="forced"/>
</when>
<removeHeaders pattern="*" excludePattern="NTX_.+|CamelJms.+|ENTAXY_.+|X-.+"/>
<to uri="direct:exit-cascade-start" />
<removeHeaders pattern="ENTAXY_.+|NTX_.+|X-.+"/>
<setBody>
<simple><![CDATA[
<test/>
]]>
</simple>
</setBody>
<to uri="xslt:ru/entaxy/esb/platform/runtime/modules/uniform-service/xslt/PutPacketResponse.xsl?failOnNullBody=false"/>
</otherwise>
</choice>
</route>
<route id="[=objectId].get-content-and-content-type">
<from uri="direct:get-content-and-content-type"/>
<setHeader name="ENTAXY_ContentType">
<xpath resultType="String">/soap-type:packet/soap-type:message/soap-type:contentType/text()
</xpath>
</setHeader>
<choice>
<when>
<xpath>count(/soap-type:packet/soap-type:message/soap-type:content) = 1</xpath>
<setHeader name="CamelJms_IntContentXsiType">
<xpath resultType="String">
/soap-type:packet/soap-type:message/soap-type:content/@xsi:type
</xpath>
</setHeader>
<setHeader name="NTX_ContentHasNotEmptyText">
<xpath resultType="Boolean">
boolean(normalize-space(/soap-type:packet/soap-type:message/soap-type:content/text()))
</xpath>
</setHeader>
<setHeader name="NTX_ContentChildNodesCount">
<xpath resultType="Integer">
count(/soap-type:packet/soap-type:message/soap-type:content/child::*)
</xpath>
</setHeader>
<choice>
<when>
<simple>${headers.NTX_ContentChildNodesCount} == 1</simple>
<setBody>
<xpath resultType="org.w3c.dom.Document">
/soap-type:packet/soap-type:message/soap-type:content/*
</xpath>
</setBody>
<setHeader name="CamelJms_IntMessageType">
<constant>Document</constant>
</setHeader>
</when>
<when>
<simple>${headers.NTX_ContentChildNodesCount} > 1</simple>
<setBody>
<xpath resultType="org.w3c.dom.NodeList">
/soap-type:packet/soap-type:message/soap-type:content/*
</xpath>
</setBody>
<setHeader name="CamelJms_IntMessageType">
<constant>NodeList</constant>
</setHeader>
</when>
<when>
<simple>${headers.NTX_ContentChildNodesCount} == 0</simple>
<choice>
<when>
<simple>${headers.NTX_ContentHasNotEmptyText}</simple>
<setBody>
<xpath resultType="String">
/soap-type:packet/soap-type:message/soap-type:content/text()
</xpath>
</setBody>
<setHeader name="CamelJms_IntMessageType">
<constant>String</constant>
</setHeader>
</when>
<otherwise>
<setBody>
<constant>
<![CDATA[
<emptyContent xmlns="http://www.entaxy.ru/connector/universal/internal"/>
]]>
</constant>
</setBody>
</otherwise>
</choice>
</when>
<otherwise>
<log message="${headers.NTX_loggingKey} Content is invalid" loggingLevel="ERROR"/>
<throwException ref="forced"/>
</otherwise>
</choice>
<removeHeader headerName="NTX_ContentHasNotEmptyText"/>
<removeHeader headerName="NTX_ContentChildNodesCount"/>
</when>
<otherwise>
<setBody>
<constant>
<![CDATA[
<empty xmlns="http://www.entaxy.ru/connector/universal/internal"/>
]]>
</constant>
</setBody>
</otherwise>
</choice>
</route>
</camelContext>
</blueprint>

View File

@ -0,0 +1,189 @@
[#ftl attributes={"generated.type":"blueprint"}]
<?xml version="1.0" encoding="UTF-8"?>
<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:soap-type="http://www.entaxy.ru/ExchangeTypes/1.0"
xsi:schemaLocation="http://www.osgi.org/xmlns/blueprint/v1.0.0 https://www.osgi.org/xmlns/blueprint/v1.0.0/blueprint.xsd">
[#import "templates:object-commons/common-utils.ftl" as utils]
<reference id="entaxy-broker" interface="org.apache.camel.Component"
filter="(connection.name=entaxy-broker)"/>
<bean id="uuidGenerator" class="java.util.UUID" scope="prototype" factory-method="randomUUID"/>
<bean id="uniform-service-exchange-connector-info"
class="ru.entaxy.platform.services.runtime.impl.EntaxyServiceConnectorInfoImpl">
<property name="serviceId" value="uniform-service"/>
<property name="profileId" value="[=properties.profile]"/>
<property name="direction" value="out"/>
<property name="endpoint" value="direct-vm:[=objectId].uniform-exchange.entry-point.for-get"/>
</bean>
<service activation="eager" interface="ru.entaxy.platform.services.runtime.EntaxyServiceConnectorInfo"
ref="uniform-service-exchange-connector-info">
<service-properties>
<entry key="profile" value="[=properties.profile]"/>
<entry key="service" value="uniform-service-out"/>
<entry key="direction" value="out"/>
</service-properties>
</service>
<bean id="headerMergeAggregator" class="ru.entaxy.esb.system.common.aggregation.HeaderMergeAggregatorImpl"/>
<bean id="headersConverter" class="ru.entaxy.esb.system.common.util.HeadersConverter">
<property name="namespace" value="http://www.entaxy.ru/ExchangeTypes/1.0"/>
<property name="customHeaders" value="NTX_CustomHeaders"/>
<property name="customHeaderPrefix" value="NTX_UNIFORM_EXCHANGE_CustomHeader"/>
</bean>
<camelContext id="[=objectId]" xmlns="http://camel.apache.org/schema/blueprint">
<globalOptions>
<globalOption key="CamelLogEipName" value="ru.entaxy.esb.uniform.exchange.passive.out.[=properties.profile]"/>
</globalOptions>
<route id="[=objectId].output-route">
<from uri="direct:entry-cascade-finish"/>
<when>
<simple>${headers.ENTAXY_Priority} == null || ${headers.ENTAXY_Priority} == ""</simple>
<setHeader name="ENTAXY_Priority">
<simple resultType="Integer">4</simple>
</setHeader>
</when>
<setHeader name="NTX_OutQueue">
<simple>entaxy.uniform.service.exchange.[=properties.profile]</simple>
</setHeader>
<removeHeaders pattern="X-.+"/>
<log message="${headers.NTX_loggingKey} Message sent to broker to queue:${headers.NTX_OutQueue} "
loggingLevel="INFO"/>
<log message="${headers.NTX_loggingKey} Body is: ${body}" loggingLevel="TRACE"/>
<toD uri="entaxy-broker:queue:${headers.NTX_OutQueue}?priority=${headers.ENTAXY_Priority}"/>
</route>
<route id="[=objectId].input-route">
<from uri="direct-vm:[=objectId].uniform-exchange.entry-point.for-get"/>
<choice>
<when>
<simple>${headers.operationName} == 'ConfirmGettingPackets'</simple>
<to uri="direct:confirm-packets"/>
</when>
<when>
<simple>${headers.operationName} == 'GetPackets'</simple>
<to uri="direct:get-packets"/>
</when>
<otherwise>
<to uri="direct:sent-message"/>
</otherwise>
</choice>
</route>
<route id="[=objectId].confirm-packets">
<from uri="direct:confirm-packets"/>
<setHeader name="NTX_UuidCount">
<xpath resultType="Integer">count(/soap-type:uuids/soap-type:uuid)</xpath>
</setHeader>
<when>
<simple>${headers.NTX_UuidCount} &gt; 1</simple>
<log message="${headers.NTX_loggingKey} Not supported more then 1 uuid" loggingLevel="WARN"/>
<throwException exceptionType="java.lang.UnsupportedOperationException"
message="Not supported more then 1 uuid"/>
</when>
<setBody>
<xpath resultType="org.w3c.dom.Document">/soap-type:uuids/soap-type:uuid[1]</xpath>
</setBody>
<setHeader name="ENTAXY_AcknowledgeMsgID">
<xpath resultType="String">/soap-type:uuid/text()</xpath>
</setHeader>
<to uri="direct-vm:uniform-service-receive-acknowledge"/>
<setHeader name="NTX_UUID">
<simple>${headers.ENTAXY_AcknowledgeMsgID}</simple>
</setHeader>
<to uri="xslt:ru/entaxy/esb/platform/runtime/modules/uniform-service/xslt/ConfirmGettingPacketResponse.xsl?failOnNullBody=false"/>
<removeHeaders pattern="Authorization|breadcrumbId|NTX_.+|ENTAXY_.+"/>
</route>
<route id="[=objectId].get-packets">
<from uri="direct:get-packets"/>
<setHeader name="NTX_SystemId">
<xpath>/soap-type:getPacketsRequest/soap-type:destination/soap-type:id/text()</xpath>
</setHeader>
<choice>
<when>
<simple>${headers.NTX_SystemId} == ''</simple>
<setHeader name="NTX_SystemId">
<simple>${headers.X-SystemName}</simple>
</setHeader>
</when>
<when>
<simple>${headers.NTX_SystemId} != ${headers.X-SystemName}</simple>
<log message="${headers.NTX_loggingKey} Source name header and SystemId is not equals!" loggingLevel="WARN"/>
<throwException exceptionType="java.security.AccessControlException" message="Unauthorized"/>
</when>
</choice>
<setHeader name="NTX_OutQueue">
<simple>entaxy.uniform.service.exchange.[=properties.profile]</simple>
</setHeader>
<setHeader name="NTX_LimitCount">
<xpath resultType="Integer">/soap-type:getPacketsRequest/soap-type:limitCount/text()</xpath>
</setHeader>
<setHeader name="NTX_LimitSize">
<xpath resultType="Integer">/soap-type:getPacketsRequest/soap-type:limitSize/text()</xpath>
</setHeader>
<when>
<simple>${headers.NTX_LimitCount} &gt; 1 || ${headers.NTX_LimitSize} &gt; 0</simple>
<log message="${headers.NTX_loggingKey} Not supported limitation mode! Only default values." loggingLevel="WARN"/>
<throwException exceptionType="java.lang.UnsupportedOperationException"
message="Not supported limitation mode! Only default values."/>
</when>
<log message="${headers.NTX_loggingKey} Fetch From JMS queue: ${headers.NTX_OutQueue}; SystemId=${headers.NTX_SystemId}"
loggingLevel="INFO"/>
<setBody>
<simple>${null}</simple>
</setBody>
<pollEnrich timeout="0" strategyRef="headerMergeAggregator">
<simple>entaxy-broker:queue:${headers.NTX_OutQueue}</simple>
</pollEnrich>
<choice>
<when>
<simple>${body} == null</simple>
<log message="${headers.NTX_loggingKey} No Messages" loggingLevel="WARN"/>
<setHeader name="NTX_Status">
<constant>204</constant>
</setHeader>
<to uri="xslt:ru/entaxy/esb/platform/runtime/modules/uniform-service/xslt/GetPacketResponse.xsl?failOnNullBody=false"/>
<removeHeaders pattern="NTX_Status"/>
</when>
<otherwise>
<log message="${headers.NTX_loggingKey} Get Message ${body}" loggingLevel="DEBUG"/>
<setHeader name="ENTAXY_AcknowledgeMsgID">
<simple>${bean:uuidGenerator.toString}</simple>
</setHeader>
<to uri="direct-vm:uniform-service-common-save-acknowledge?block=true&amp;timeout=70000"/>
<bean ref="headersConverter" method="json2xml"/>
<when>
<simple>${headers.CamelJms_IntMessageType} == 'String'</simple>
<bean beanType="org.apache.commons.lang3.StringEscapeUtils"
method="escapeXml(${body})"/>
</when>
<setBody>
<simple><![CDATA[<body>${body}</body>]]></simple>
</setBody>
<to uri="xslt:ru/entaxy/esb/platform/runtime/modules/uniform-service/xslt/GetPacketResponse.xsl"/>
<to uri="direct-vm:uniform-service-transform-body?block=true&amp;timeout=30000"/>
<log message="${headers.NTX_loggingKey} Send message ${headers.ENTAXY_MessageUUID} for ${headers.NTX_SystemId} ackId ${headers.ENTAXY_AcknowledgeMsgID}"
loggingLevel="INFO"/>
<removeHeaders pattern="JMS.+|NTX_.+|ENTAXY_.+"/>
</otherwise>
</choice>
</route>
</camelContext>
</blueprint>