Мул: как использовать сервис от удаленного клиента
Я следовал этому учебнику, который действительно отлично подходит для использования сервисов wb из WSDL http://training.middlewareschool.com/mule/consuming-wsdl-first-service/. Я пытался сделать аналогичный подход, создав клиентский веб-сервис в Eclipse с помощью CXF и опубликовав веб-сервис в Mule. Мой вопрос: если я настрою для клиента и приложения mule одну и ту же конечную точку (например: localhost: 8082 / ipsoap / test), как я могу заставить работать веб-службу так же, как и с учебником. То есть, если я тестирую отправку запроса mule от клиента (в eclipse), я должен получить правильный ответ от mule. Заранее благодарю вас за потраченное время.
Короче говоря:
1-я создал клиентское приложение в eclipse, используя wsdl по следующей ссылке в учебнике: http://ws.cdyne.com/ip2geo/ip2geo.asmx?wsdl
2-Для начала в Mule я добавил http-коннектор и регистратор и изменил путь к конечной точке в eclipse на тот Я установил на муле HTTP-коннектор. Таким образом, я могу видеть, что есть полезная нагрузка, когда я посылаю запрос Mule от клиента в Eclipse.
3 - мне нужно иметь приложение, а именно мое клиентское приложение в eclipse, потребляющее опубликованный сервис в Mule. Теперь я думаю, что это достигается с помощью компонента CXF, но я все еще не могу заставить его работать. На самом деле, я задаюсь вопросом, является ли это одним из допустимых способов использования Мула, поскольку я не смог найти никакого учебника о том, чего я пытаюсь достичь.
Итак, вот как я проверить его:
Я использовал ту же конечную точку, что и в Mule, и получил следующий журнал:
> INFO 2014-07-07 13:19:46,124
> [[soapservice].connector.http.mule.default.receiver.02]
> org.mule.api.processor.LoggerMessageProcessor: message transformation
> <soapenv:Envelope
> xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
> xmlns:q0="http://ws.cdyne.com/"
> xmlns:xsd="http://www.w3.org/2001/XMLSchema"
> xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
> <soapenv:Body>
> <q0:ResolveIP>
> <q0:ipAddress>173.194.36.39</q0:ipAddress>
> <q0:licenseKey/>
> </q0:ResolveIP> </soapenv:Body> </soapenv:Envelope>
>
> ERROR 2014-07-07 13:19:46,134
> [[soapservice].connector.http.mule.default.receiver.02]
> org.mule.exception.DefaultMessagingExceptionStrategy:
> ******************************************************************************** Message : wrong number of arguments. Failed to route
> event via endpoint: org.mule.module.cxf.CxfOutboundMessageProcessor.
> Message payload is of type: String Code :
> MULE_ERROR--2
> -------------------------------------------------------------------------------- Exception stack is:
> 1. wrong number of arguments (java.lang.IllegalArgumentException) sun.reflect.NativeMethodAccessorImpl:-2 (null)
> 2. wrong number of arguments. Failed to route event via endpoint: org.mule.module.cxf.CxfOutboundMessageProcessor. Message payload is of
> type: String (org.mule.api.transport.DispatchException)
> org.mule.module.cxf.CxfOutboundMessageProcessor:150
> (http://www.mulesoft.org/docs/site/current3/apidocs/org/mule/api/transport/DispatchException.html)
> -------------------------------------------------------------------------------- Root Exception stack trace: java.lang.IllegalArgumentException: wrong
> number of arguments at
> sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at
> sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) at
> sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
> + 3 more (set debug level logging or '-Dmule.verbose.exceptions=true' for everything)
Как вы можете видеть, запрос soap можно увидеть, но он не потребляется на уровне компонента CXF. Вот мой код мула:
<flow name="SoapService" doc:name="SoapService">
<http:inbound-endpoint exchange-pattern="request-response" host="localhost" port="8082" path="test/cap.asmx" doc:name="HTTP"/>
<byte-array-to-string-transformer doc:name="Byte Array to String"/>
<logger message="message transformation #[message.payload]" level="INFO" doc:name="Logger"/>
<flow-ref name="RequestResponse" doc:name="Flow Reference"/>
<logger level="INFO" doc:name="Logger" message="after posting #[message.payload]"/>
<mulexml:object-to-xml-transformer doc:name="Object to XML"/>
</flow>
<flow name="RequestResponse" doc:name="RequestResponse">
<cxf:jaxws-client operation="ResolveIP" clientClass="pck.IP2Geo" port="IP2GeoSoap" wsdlLocation="file:/C:/Users/12204-hajjam1/workspace/ipgo/src/ipgeo.wsdl" doc:name="soap 2"/>
<logger message="before posting #[message.payload]" level="INFO" doc:name="Logger"/>
<http:outbound-endpoint exchange-pattern="request-response" method="POST" address="http://localhost:10387/ip2geo/ip2geo.asmx" doc:name="HTTP"/>
</flow>
Также, если я добавлю набор полезных данных с ip #[{'173.194.36.39',"}] (второй аргумент можно оставить пустым) перед компонентом cxf он возвращает пустой элемент. Тем не менее, ответ должен быть примерно таким:
<pck.IPInformation>
<city>Mountain View</city>
<stateProvince>CA</stateProvince>
<country>United States</country>
<organization/>
<latitude>37.4192</latitude>
<longitude>-122.0574</longitude>
<areaCode>0</areaCode>
<timeZone/>
<hasDaylightSavings>false</hasDaylightSavings>
<certainty>90</certainty>
<regionName/>
<countryCode>US</countryCode>
</pck.IPInformation>
Таким образом, мой проблема заключается в потреблении и получении ответа. Я прошу прощения за длину, но я боролся с этим и не нашел решения в интернете. Заранее спасибо.