Как использовать веб-сервис SOAP с кодировкой rpc в Java

Есть ли способ использовать веб-сервис SOAP с Java, просто используя:

  • требуется SOAPaction (например, имя метода с именем "find")
  • URL веб-службы
  • аутентификация заголовка (имя пользователя и пароль)
  • в конце выведите результаты

У меня есть пример XML-файла запроса, успешно используя его с php, но я не могу найти подходящий способ сделать это на Java.

[обновление: стиль WSDL веб-сервиса RPC/ закодирован]

[обновление #2: вы можете узнать, как я решил проблему ниже (с помощью заглушек Java, сгенерированных IDE)]

2 ответа

Решение

После долгих поисков я наконец нашел способ использовать rpc/encoded SOAP веб-сервис. Я решил создать клиентскую заглушку из URL-адреса wsdl.

Успешный способ сделать это - через эту ссылку (источник: как проще всего сгенерировать клиент Java из WSDL в кодировке RPC)

и после настройки с помощью eclipse/netbeans сгенерированного кода (из заглушек Java) вы просто создаете свой клиент. Используя сгенерированные вами классы, вы можете использовать предпочитаемые мыльные API.

например

Auth auth = new Auth("username", "password");
SearchQuery fsq = new SearchQuery ("param1","param2","param3");
Model_SearchService service = new Model_SearchServiceLoc();
SearchRequest freq = new SearchRequest(auth, fsq);
Result r[] = service.getSearchPort().method(freq);
for(int i=0; i<r.length; i++){
    System.out.println(i+" "+r[i].getInfo()[0].toString());
}

Ты можешь использовать java.net.HttpURLConnection отправлять SOAP-сообщения. например:

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

    String xml = "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n" +
            "<soap:Envelope xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\">\r\n" +
            "  <soap:Body>\r\n" +
            "    <ConversionRate xmlns=\"http://www.webserviceX.NET/\">\r\n" +
            "      <FromCurrency>USD</FromCurrency>\r\n" +
            "      <ToCurrency>CNY</ToCurrency>\r\n" +
            "    </ConversionRate>\r\n" +
            "  </soap:Body>\r\n" +
            "</soap:Envelope>";

    Authenticator.setDefault(new Authenticator() {
        protected PasswordAuthentication getPasswordAuthentication() {
            return new PasswordAuthentication("username", "password".toCharArray());
        }
    });

    URL url = new URL("http://www.webservicex.net/CurrencyConvertor.asmx");
    URLConnection  conn =  url.openConnection();
    conn.setDoOutput(true);
    conn.setRequestProperty("Content-Type", "text/xml; charset=utf-8");
    conn.setRequestProperty("SOAPAction", "http://www.webserviceX.NET/ConversionRate");

    // Send the request XML
    OutputStream outputStream = conn.getOutputStream();
    outputStream.write(xml.getBytes());
    outputStream.close();

    // Read the response XML
    InputStream inputStream = conn.getInputStream();
    Scanner sc = new Scanner(inputStream, "UTF-8");
    sc.useDelimiter("\\A");
    if (sc.hasNext()) {
        System.out.print(sc.next());
    }
    sc.close();
    inputStream.close();

}
Другие вопросы по тегам