Java Apache camel soap请求类型转换错误

Java Apache camel soap请求类型转换错误,java,soap,apache-camel,apache-karaf,Java,Soap,Apache Camel,Apache Karaf,我正在尝试在osgi环境(karaf)上运行的ApacheCamel中发送soap请求。直到现在我才得到这个密码 public void start(BundleContext context) throws Exception { LOGGER.log(Level.INFO, "START"); MyRouteBuilder routeBuilder = new MyRouteBuilder(); camelContext = new DefaultCamelCont

我正在尝试在osgi环境(karaf)上运行的ApacheCamel中发送soap请求。直到现在我才得到这个密码

public void start(BundleContext context) throws Exception {
    LOGGER.log(Level.INFO, "START");

    MyRouteBuilder routeBuilder = new MyRouteBuilder();
    camelContext = new DefaultCamelContext();

    StreamComponent stream = new StreamComponent();
    camelContext.addComponent("stream", stream);

    camelContext.addRoutes(routeBuilder);

    CxfComponent cxf = new CxfComponent();
    camelContext.addComponent("cxf", cxf);

    try {
        ProducerTemplate template = camelContext.createProducerTemplate(0);
        camelContext.start();
        String url = "cxf://http://some.server/webservice?"
                + "wsdlURL=http://some.server/webservice?wsdl&"
                + "serviceName={http://some.server}Service&"
                + "portName={http://some.server}ServiceSoapPort"
                + "&dataFormat=MESSAGE";
        Exchange e = sendSimpleMessage(template, url);
        LOGGER.log(Level.INFO, e.getOut().getBody().toString());
    } catch (Exception e) {
        LOGGER.log(Level.SEVERE, "ERROR: ");
    }

}

public void stop(BundleContext context) {
    LOGGER.log(Level.INFO, "STOP");

    try {
        camelContext.stop();
    } catch (Exception e) {
        LOGGER.log(Level.INFO, e.toString());
    }

}

private static Exchange sendSimpleMessage(ProducerTemplate template,
        String endpointUri) {

    final List<String> params = new ArrayList<String>();
    Map<String, Object> headers = new HashMap<String, Object>();
    headers.put(CxfConstants.OPERATION_NAME, "authenticate");
    headers.put("requestObject", new DefaultCxfBinding());
    params.add("hello world");

    Exchange exchange = template.request(endpointUri, new Processor() {
        public void process(final Exchange exchange) throws Exception {
            SOAPMessage soapMessage = createSOAPRequest();

            soapMessage.setContentDescription("someId");
            soapMessage.setProperty("key", "value");
            soapMessage.setProperty("key", "value");
            soapMessage.setProperty("key", "value");

            soapMessage.setContentDescription("");
            soapMessage.setProperty("key", "value");

            exchange.getIn().setBody(soapMessage.getSOAPBody());
        }
    });
    return exchange;

}

private static SOAPMessage createSOAPRequest() throws Exception {
    MessageFactory messageFactory = MessageFactory.newInstance();
    SOAPMessage soapMessage = messageFactory.createMessage();
    SOAPPart soapPart = soapMessage.getSOAPPart();

    String serverURI = "http://some.server";

    // SOAP Envelope
    SOAPEnvelope envelope = soapPart.getEnvelope();
    envelope.addNamespaceDeclaration("", serverURI);

    javax.xml.soap.SOAPBody soapBody = envelope.getBody();
    SOAPElement soapBodyElem = soapBody.addChildElement("getApplication",
            "example");

    MimeHeaders headers = soapMessage.getMimeHeaders();
    headers.addHeader("SOAPAction", "http://some.server/someFunction");

    soapMessage.saveChanges();

    LOGGER.log(Level.INFO, soapMessage.toString());

    return soapMessage;
}
当我删除portName时,serviceName也会发生同样的情况——那么如何才能将这些参数作为javax.xml.namespace.QName传递呢?或者我还有什么做错的吗

编辑: 当我把它简化成这样时,会得到同样的错误

        from("direct:start")
            .process(new Processor() {

                public void process(Exchange exchange) throws Exception {
                    exchange.getIn().setBody("<mandant>001</<mandant>");
                }
            })
            .to("cxf://http://some.server/webservice?"
            + "wsdlURL=http://some.server/webservice?wsdl&"
            + "serviceName={http://some.server}Service&"
            + "portName={http://some.server}ServiceSoapPort"
            + "&dataFormat=MESSAGE")
            .to("file:C:/output?fileName=soap.txt");
from(“直接:开始”)
.进程(新处理器(){
公共作废进程(Exchange)引发异常{

exchange.getIn().setBody(“001您需要的TypeConverter通常由Spring或Blueprint使用加载到CamelContext。您可以像将TypeConverter添加到CamelContext中一样,但它仅适用于实现TypeConverter接口的类,但CxfConverter带有@Converter注释,应该使用discovery找到它

我不知道如何解决这个问题,但我希望你能进一步了解这些信息。如果你发现了这个问题,请在这里更新

        from("direct:start")
            .process(new Processor() {

                public void process(Exchange exchange) throws Exception {
                    exchange.getIn().setBody("<mandant>001</<mandant>");
                }
            })
            .to("cxf://http://some.server/webservice?"
            + "wsdlURL=http://some.server/webservice?wsdl&"
            + "serviceName={http://some.server}Service&"
            + "portName={http://some.server}ServiceSoapPort"
            + "&dataFormat=MESSAGE")
            .to("file:C:/output?fileName=soap.txt");