2016-07-29 5 views
0

Я делаю разработку для отправки запроса SOAP на удаленную веб-службу и получения ответа с помощью apache Camel.Отправьте запрос SOAP на удаленный веб-сервис и получите ответ с помощью apache Camel

В этом случае я успешно сгенерировал код клиента wsdl2java с помощью cxf-codegen-plugin для WSDl, упомянутого ниже.

  • Пример WSDL URL: http://www.webservicex.net/stockquote.asmx?WSDL

И после того, как делают некоторые исследования, я создал ниже пример кода, чтобы отправить запрос SOAP к веб-службе, определенной там и получить ответ с Apache Camel, используя сгенерированный клиентский код.

CamelContext context = new DefaultCamelContext(); 

HttpComponent httpComponent = new HttpComponent(); 
context.addComponent("http", httpComponent); 

ProducerTemplate template = context.createProducerTemplate(); 

GetQuote getQuote = new GetQuote(); 
getQuote.setSymbol("test123"); 

GetQuoteResponse getQuoteResponse = template.requestBody("http://www.webservicex.net/stockquote.asmx",getQuote, GetQuoteResponse.class); 

System.out.println(getQuoteResponse); 

Но оно дает ошибку ниже.

Caused by: org.apache.camel.InvalidPayloadException: No body available of type: java.io.InputStream but has value: [email protected] of type: net.webservicex.GetQuote on: Message[ID-namal-PC-33172-1469806939935-0-1]. Caused by: No type converter available to convert from type: net.webservicex.GetQuote to the required type: java.io.InputStream with value [email protected] Exchange[ID-namal-PC-33172-1469806939935-0-2]. Caused by: [org.apache.camel.NoTypeConversionAvailableException - No type converter available to convert from type: net.webservicex.GetQuote to the required type: java.io.InputStream with value [email protected]] 

Caused by: org.apache.camel.NoTypeConversionAvailableException: No type converter available to convert from type: net.webservicex.GetQuote to the required type: java.io.InputStream with value [email protected] 

Что у меня отсутствует? Связывание данных? или что-нибудь еще? Я сгенерировал код клиента с помощью cxf, так как я могу отправить это с помощью cxf?

Я просто хочу отправить запрос SOAP на удаленный веб-сервис и получить ответ с помощью apache Camel.

  • Camel Версия: 2.9.0
  • Java Версия: 1.7.x/1.8.x

ответ

2

Было бы лучше использовать компонент CXF для этого. В зависимости от того, как генерируется код CXF, вы можете просто отправить & получить строку вместо объекта в вашем примере - см. How to tell cxf to keep the wrapper types in methods? для получения дополнительной информации.

Вот ваш пример с CXF.

CamelContext context = new DefaultCamelContext(); 

CxfComponent cxfComponent = new CxfComponent(context); 
CxfEndpoint serviceEndpoint = 
    new CxfEndpoint("http://www.webservicex.net/stockquote.asmx", cxfComponent); 

// Service class generated by CXF codegen plugin. 
serviceEndpoint.setServiceClass(StockQuoteSoap.class); 

ProducerTemplate template = context.createProducerTemplate(); 

// Request and response can be 'bare' or 'wrapped', see the service class. 
String getQuoteResponse = template.requestBody(serviceEndpoint, "MSFT", String.class); 

System.out.println(getQuoteResponse); 
+0

Большое спасибо bgossit! Он отлично работает для этого. У меня есть один вопрос. Как отправить тело запроса, если оно принимает несколько параметров. например: как отправлять параметры запроса (messageHeader, securityHeader, sessionCreateRQ) для нижеприведенного вызова (SessionCreateRS sessionCreateRS = sessionCreatePortType.sessionCreateRQ (messageHeader, securityHeader, sessionCreateRQ); // Это от JAX-WS) – namalfernandolk

+0

О, у меня был немой ответ .. Я просто добавил их в список и отправил. Это сработало! Пожалуйста, поделитесь лучшим ответом. – namalfernandolk

Смежные вопросы