相关疑难解决方法(0)

如何使用WebServiceTemplate发送SOAP请求?

我正在尝试向SOAP Web服务发送请求.我阅读了本教程并准备了以下代码.但是,我将向多个SOAP Web服务发送不同的请求,而本教程则关注一个请求.如何使用WebserviceTemplate?发送SOAP请求?

WebServiceTemplate

    SoapMessage soapMsg = new SoapMessage();
    soapMsg.setUsername("Requester");
    soapMsg.setPassword("Pass");
    soapMsg.setLanguageCode("EN");
    Request request = new Request();
    request.setDeparture("FDH");
    request.setDestination("HAM");
    Date date = new Date();
    SimpleDateFormat frm2 = new SimpleDateFormat("yyyy-MM-dd");
    request.setDepartureDate(frm2.parse(frm2.format(date)));
    request.setNumADT(1);
    request.setNumCHD(0);
    request.setNumInf(0);
    request.setCurrencyCode("EUR");
    request.setWaitForResult(true);
    request.setNearByDepartures(true);
    request.setNearByDestinations(true);
    request.setRronly(false);
    request.setMetaSearch(false);
    soapMsg.setRequest(request);
    WebServiceTemplate webServiceTemplate = new WebServiceTemplate().  //how to create object and send request!
    Object response = webServiceTemplate.marshalSendAndReceive(
            "https://aaa5.elsyarres.net", soapMsg);
    Response msg = (Response) response;
    System.err.println("size of results of wogolo:"
            + msg.getFlights().getFlight().size());
Run Code Online (Sandbox Code Playgroud)

java spring soap web-services jaxb

21
推荐指数
2
解决办法
5万
查看次数

如何在OSGI(Liferay DXP)中使用JAXB 2.2.11

我正在尝试在osgi环境(Liferay DXP)中使用JAXB 2.2.11。我在创建JAXBContext时遇到问题。基于在研究像发现了一些其他来源的这个这个,我已确定,在OSGi容器中,我需要提供JAXB实例化上下文正确的类加载器。所以我有这样的代码:

ClassLoader cl package.with.jaxb.objects.ObjectFactory.class.getClassLoader(); JAXBContext jc = JAXBContext.newInstance("package.with.jaxb.objects ", cl);

这段代码导致空指针异常与以下堆栈跟踪:

Caused by: java.lang.NullPointerException
    at javax.xml.bind.ContextFinder.handleClassCastException(ContextFinder.java:129)
    at javax.xml.bind.ContextFinder.newInstance(ContextFinder.java:201)
    at javax.xml.bind.ContextFinder.newInstance(ContextFinder.java:146)
    at javax.xml.bind.ContextFinder.find(ContextFinder.java:371)
    at javax.xml.bind.JAXBContext.newInstance(JAXBContext.java:446)
    at javax.xml.bind.JAXBContext.newInstance(JAXBContext.java:409)
Run Code Online (Sandbox Code Playgroud)

查看ContextFinder的源,我可以看到context在第129行中该值必须为null:

throw handleClassCastException(context.getClass(), JAXBContext.class);

我认为问题可能是我的模块依赖于jaxb-api 2.2.11,但是jaxb-impl类是由rt.jar在运行时提供的,并且可能比2.2.11更新,因为Liferay DXP在JDK 1.8上运行。为了解决这个问题,我尝试将jaxb-impl.jar 2.2.11作为依赖项包含在我的osgi模块中,并认为jaxb-api和jaxb-impl版本会匹配。之后,尝试使用与上述相同的代码创建JAXBContent会导致以下错误:

ClassCastException: attempting to cast jar:file:/C:/Program%20Files/Java/jdk1.8.0_144/jre/lib/rt.jar!/javax/xml/bind/JAXBContext.class to bundleresource://623.fwk616113009:13/javax/xml/bind/JAXBContext.class. Please make sure that you are specifying the proper ClassLoader.
Run Code Online (Sandbox Code Playgroud)

根据此消息的外观,实例化的JAXBContext来自通过rt.jar加载的JAXBContext版本。这让我非常困惑,因为我希望使用模块的类加载器加载的JAXBContext版本,因为我已经在模块中包含jaxb-impl.jar,并且指定了模块的类加载器为我对JAXBContext.newInstance的调用。谁能阐明我如何使jaxb 2.2.11在osgi容器中工作?

*请注意,我无法升级模块所使用的jaxb-api的版本,因为JAXB代码实际上位于需要jaxb 2.2.11的第三方jar中(目前我刚刚从等式中删除了第三方jar通过编写一些测试JAXB代码)。

osgi jaxb osgi-bundle liferay-7

3
推荐指数
1
解决办法
1212
查看次数

标签 统计

jaxb ×2

java ×1

liferay-7 ×1

osgi ×1

osgi-bundle ×1

soap ×1

spring ×1

web-services ×1