gpt4 book ai didi

java - Apache camel soap 请求类型转换错误

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:57:40 26 4
gpt4 key购买 nike

我正在尝试在 osgi 环境 (karaf) 上运行的 apache camel 中发送 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;
}

现在我的 karaf 日志中出现了这个错误

java.lang.IllegalArgumentExcetion: Could not find a suitable setter for property: portName as there isn't a setter method with same type: java.lang.String nor type conversion possible: No type converter available to convert from type: java.lang.String to the required type: javax.xml.namespace.QName with value [...]

当我删除 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");

最佳答案

您需要的 TypeConverter 是 CxfConverter它通常由 Spring 或 Blueprint 使用 AnnotationTypeConverterLoader 加载到 CamelContext。 .您可以将 TypeConverter 添加到 CamelContext,如 this但它只适用于实现 TypeConverter 接口(interface)的类,但 CxfConverter 是 @Converter 注释的,应该使用发现找到它。

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

关于java - Apache camel soap 请求类型转换错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32517237/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com