2016-04-26 7 views
1

Ich versuche, einen Code First-Webdienst mithilfe der Camel CXF-Komponente verfügbar zu machen. Durch einige der verfügbaren Beispiele Montage, habe ich auf die folgende Route Definition kommen:Implementieren eines CXF-Webdienstes mit Camel

<beans xmlns="http://www.springframework.org/schema/beans" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:camel="http://camel.apache.org/schema/spring" 
    xmlns:cxf="http://camel.apache.org/schema/cxf" xmlns:context="http://www.springframework.org/schema/context" 
    xsi:schemaLocation=" 
     http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd 
     http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd 
     http://camel.apache.org/schema/spring http://camel.apache.org/schema/spring/camel-spring.xsd 
     http://camel.apache.org/schema/cxf http://camel.apache.org/schema/cxf/camel-cxf.xsd"> 

    <bean id="productServiceImpl" class="com.demo.ws.CustomerServiceImpl" /> 

    <camelContext xmlns="http://camel.apache.org/schema/spring"> 

     <route> 
      <from uri="cxf:bean:productServiceEndpoint" /> 

      <bean ref="productServiceImpl" /> 
      <!-- log input received --> 
      <to uri="log:output" /> 
     </route> 


    </camelContext> 
    <cxf:cxfEndpoint id="productServiceEndpoint" 
     address="http://localhost:9001/productService" serviceClass="com.demo.ws.CustomerService" /> 


</beans> 

Die SEI und Implementierungsklassen Ich verwende trivial sind:

@WebService(serviceName="customerService") 
public interface CustomerService 
{ 
    public String getCustomerById(String customerId); 

} 

public class CustomerServiceImpl implements CustomerService 
{ 


    @Override 
    public String getCustomerById(String customerId) 
    { 
     System.out.println("Called with "+customerId); 
     return "Hello " +customerId; 
    } 
} 

Wenn das Projekt ausgeführt wird, die korrekt aufgerufen wird, um die Implementierungsklasse WebService, der String „Hallo [name]“ Rückkehr, aber die zurück Körper aus SOAPUI leer ist:

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> 
    <soap:Body/> 
</soap:Envelope> 

können Sie mir helfen t zu produzieren Er gibt den Wert in der Antwort zurück? Danke

Antwort

1

Sie sollten eine SOAP-Nachricht zurück: http://camel.apache.org/cxf-example.html

+0

Vielen Dank für Ihre Antwort:

 SOAPMessage soapMessage = MessageFactory.newInstance().createMessage(); SOAPBody body = soapMessage.getSOAPPart().getEnvelope().getBody(); QName payloadName = new QName("http://apache.org/hello_world_soap_http/types", "greetMeResponse", "ns1"); SOAPBodyElement payload = body.addBodyElement(payloadName); SOAPElement message = payload.addChildElement("responseType"); message.addTextNode("Your custom message"); return soapMessage; 

Sie auch einen Blick auf die Kamel doc Beispiele nehmen. Ich habe mir das Dokument und den Link angeschaut. Das Hauptproblem ist, dass ich für jede Methode einen PayloadName erstellen muss. Ich habe mich gefragt, ob die SOAP-Antwort automatisch vom Web-Service generiert werden könnte (die Return-String in der Nachricht umhüllt) – user2824073

+1

@ user2824073, die SOA-Prinzipien brechen würde. Jede Methode sollte klar definiert und dokumentiert sein, damit die generierte WSDL von Entwicklern mit minimalem Aufwand verwendet werden kann. Von meinem Verständnis basierend auf Ihrem Kommentar wollen Sie eine Methode, die eine andere Antwort zurückgibt? Bitte klären Sie – Namphibian

Verwandte Themen