Доступ к XML из стороннего сервиса SOAP? - PullRequest
1 голос
/ 02 октября 2011

Я использую созданный поставщиком SOAP-клиент для доступа к его службе SOAP в моем приложении REST на Jersey 1.3.

В некоторых случаях мне хотелось бы получить доступ к XML ответа, а не к прокси клиентаучебный класс.Есть ли способ сделать это?

У меня также есть доступ к их WSDL, если это облегчит эту задачу.

1 Ответ

0 голосов
/ 05 апреля 2012

Вы можете использовать JAX-WS Dispatch client, чтобы получить доступ к XML:

import java.io.FileInputStream;
import java.net.URL;

import javax.xml.namespace.QName;
import javax.xml.soap.MessageFactory;
import javax.xml.soap.SOAPBody;
import javax.xml.soap.SOAPMessage;
import javax.xml.ws.Dispatch;
import javax.xml.ws.Service;
import javax.xml.ws.soap.SOAPBinding;

import org.w3c.dom.Node;

public class DispatchClient {
    public static void main(String[] args) throws Exception {

        String wsdlAddress = "http://127.0.0.1:8080/news/NewsWS?wsdl";
        URL wsdl = new URL(wsdlAddress);

        QName serviceName = new QName("http://news/", "NewsWebService");
        QName portName = new QName("http://news/", "NewsPort");

        //nie ma WSDL-a
        Service service = Service.create(serviceName);
        service.addPort(portName, SOAPBinding.SOAP12HTTP_BINDING, "http://127.0.0.1:8080/news/NewsWS");     


        Dispatch<SOAPMessage> dispatch = service.createDispatch(portName,
                SOAPMessage.class, Service.Mode.MESSAGE);

        MessageFactory mf = MessageFactory.newInstance();
        SOAPMessage req = mf.createMessage(null, new FileInputStream("NewsCountSoapRequest.xml"));

        SOAPMessage res = dispatch.invoke(req);

        SOAPBody body = res.getSOAPBody(); //SOAP body XML
    }
}

Вы можете работать с XML тела SOAP, используя интерфейс DOM (все это безумие Node) или использовать XPath.

...