Я испытываю интересную дилемму с Apache Camel и CXF.Как явным образом определить Apache Camel CXF Потребитель и производитель
Я стараюсь строить следующие маршруты.
from("servlet://proxy?matchOnUriPrefix=true") .to("cxf:/incident?wsdlURL=wsdl/OrderInfoService.wsdl&dataFormat=MESSAGE");
`from("cxf:/incident?wsdlURL=wsdl/OrderInfoService.wsdl&dataFormat=MESSAGE").to("file:/META-INF/data/test.xml");`
Мое желание на самом деле получить запрос с Servlet компонента, сделать что-то с (процессор, преобразование, и т.д., но я исключил здесь по соображениям простоты) перенаправить это мой реализации WebService и файл компонент возвращает содержимое файла в результате в WebService.
Проблема в том, что если я делаю из конечной точки from("servlet://proxy?matchOnUriPrefix=true")
«Маршрутизация до конечной точки» to("cxf:/incident?wsdlURL=wsdl/OrderInfoService.wsdl&dataFormat=MESSAGE")
«Верблюд считает, что это должен быть CXF Consumer, но я хочу, чтобы он был продюсером.
Так что я нахожусь на маршруте от from("servlet://proxy?matchOnUriPrefix=true")
до 'from("cxf:/incident?wsdlURL=wsdl/OrderInfoService.wsdl&dataFormat=MESSAGE")
', но я не мог понять, как это сделать.
Если я сконфигурировал как первую конфигурацию, компонент сервлета получит запрос, маршрутизирует его в CXF: потребитель, тогда он запускает TCP-вызов CXF: Производитель, определенный в 'from("cxf:/incident?wsdlURL=wsdl/OrderInfoService.wsdl&dataFormat=MESSAGE")
', работает, но это странно, я не знаю, хотите запустить TCP-вызов, я просто хочу, чтобы сообщение перешло на 'from("cxf:/incident?wsdlURL=wsdl/OrderInfoService.wsdl&dataFormat=MESSAGE")
'.
Есть ли способ достичь того, что я хочу? Могу ли я определить потребителя или поставщика CXF, а затем использовать «от», «до»?
Смешно Я сделал что-то подобное с ServiceMix/Fuse.
<?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:osgiRouter="http://osgi.salgar.org/osgirouter"
xmlns:http="http://servicemix.apache.org/http/1.0"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://servicemix.apache.org/http/1.0 http://servicemix.apache.org/http/1.0/servicemix-http.xsd">
<http:consumer service="http:FindOrders" endpoint="httpEndpoint" locationURI="http://localhost:8088/MockB2BService"
defaultMep="http://www.w3.org/2004/08/wsdl/in-out" targetService="osgiRouter:mediation" />
<bean class="org.apache.servicemix.common.osgi.EndpointExporter" />
</beans>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:eip="http://servicemix.apache.org/eip/1.0"
xmlns:osgiRouter="http://osgi.salgar.org/osgirouter"
xmlns:orderProvider_v1="http://v1.salgar.org/B2BService"
xmlns:orderProvider_v2="http://v2.salgar.org/B2BService"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://servicemix.apache.org/eip/1.0 http://servicemix.apache.org/eip/1.0/servicemix-eip.xsd">
<eip:content-based-router endpoint="osgiRouterMediation"
service="osgiRouter:mediation">
<eip:rules>
<eip:routing-rule>
<eip:predicate>
<eip:xpath-predicate id="wsdl_version_predicate_v1"
xpath="(//namespace::*[.='http://v1.salgar.org/B2BService']) = 'http://v1.salgar.org/B2BService'" />
</eip:predicate>
<eip:target>
<eip:exchange-target service="orderProvider_v1:findOrders" />
</eip:target>
</eip:routing-rule>
<eip:routing-rule>
<eip:predicate>
<eip:xpath-predicate id="wsdl_version_predicate_v2"
xpath="(//namespace::*[.='http://v2.salgar.org/B2BService']) = 'http://v2.salgar.org/B2BService'" />
</eip:predicate>
<eip:target>
<eip:exchange-target service="orderProvider_v2:findOrders" />
</eip:target>
</eip:routing-rule>
</eip:rules>
</eip:content-based-router>
<bean class="org.apache.servicemix.common.osgi.EndpointExporter" />
</beans>
<?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:cxfbc="http://servicemix.apache.org/cxfbc/1.0"
xmlns:orderProvider_v1="http://v1.salgar.org/B2BService"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://servicemix.apache.org/cxfbc/1.0 http://servicemix.apache.org/cxfbc/1.0/servicemix-cxf-bc.xsd">
<cxfbc:provider endpoint="findOrdersProviderEndpoint"
useJBIWrapper="false" wsdl="classpath:v1/B2BService.wsdl" service="orderProvider_v1:findOrders"
locationURI="http://localhost:8989/MockB2BService" />
<bean class="org.apache.servicemix.common.osgi.EndpointExporter" />
</beans>
Который работает, как ожидалось, но там я мог бы определить конечную точку явным образом в качестве поставщика CXF, у меня такую же возможность здесь?
если я использую «из ("сервлета: // прокси matchOnUriPrefix = истина") .to ("CXF:?/Инцидент wsdlURL = WSDL/OrderInfoService.wsdl & DataFormat = MESSAGE") .to (" Файл:/META-INF/data/test.xml ");' и 'to ("cxf:/accident? WsdlURL = wsdl/OrderInfoService.wsdl & dataFormat = MESSAGE ") 'пытается использовать web-сервис (делает TCP-вызов), а не производить его (обеспечить логику реализации веб-службы). По крайней мере, он работает на моем тестовом стенде. – posthumecaver
Ваши объяснения не ясны, но Я добавила ответ: надеюсь, что это поможет. Дайте мне знать, если это все еще не помогает. – gnanagurus
К сожалению, мой вариант использования намного более странный. Вы делаете предположение, что вызов веб-сервиса внутри не имеет никакого смысла, но я хочу, когда я получил вызов из конечной точки сервлета и маршрутизируюсь до конечной точки веб-службы, я все еще хочу проверить соответствие wsdl и, кроме того, у меня есть некоторые заголовки веб-серверов в вызове, которые они также должны интерпретировать в конечной точке веб-службы. Поэтому мне понадобится внутренняя веб-служба endpoint. – posthumecaver