Как подключиться к SOAP-серверу с Java и запустить встроенные методы / службы моего сервера?

#java #php #zend-framework

#java #php #zend-framework

Вопрос:

Как я могу подключиться с Java к моему SOAP-серверу и получить методы givemeSmile()? Это не работает на Java, я пробовал URLConnection, но я думаю, что это невозможно с этим?.

Мой вопрос таков: существуют ли какие-либо клиентские библиотеки SOAP?

Php (отправитель):

 class Zend_Controller_Action
{
  /**
   * Client module - always works
   */
  public static function indexAction()
  {
    $client = new Zend_SOAP_Clnt('http://www.test.gov/index/server');
    $result = $client->givemeSmile('test');
    var_dump($result);  // output: hehehe test
    exit;
  }

  /**
   * Server module - works
   */
  public static function serverAction()
  {
    require_once APPLICATION_PATH . '/models/Soap.php';
    if ( $if_mannually_url_is_open===true ){
      $server = new Zend_Soap_AutoDiscover();
    }else{
      $server = new Zend_Soap_Server("http://www.test.gov/index/server");
    }
    $server->setClass('My_Model_Soap')->forJava();
    $server->handle()->render();
  }

}
  

Java (приемник):

   URL url = new URL(getServer(1)); // to WSDL/SOAP link
  URLConnection conn = url.openConnection();
  conn.setDoOutput(true);
  OutputStreamWriter wr = new OutputStreamWriter(conn.getOutputStream());
  wr.write(data);
  wr.flush();
  BufferedReader rd = new BufferedReader(new InputStreamReader(conn.getInputStream()));
  String line;
  while ((line = rd.readLine()) != null) 
  {
       line.givemeSmile(); // expected output: hehehe test
  }
  

Ответ №1:

Я бы использовал apache axis 2 для быстрого создания soap-клиента. Сообщения soap обычно имеют формат xml, а SOAP использует файл WSDL в качестве описания интерфейса.

Вот краткое введение, включающее 5 строк для реализации SOAP-клиента и получения результата от полученного SOAP-массажа.

Ответ №2:

Вы можете использовать библиотеку HttpClient для отправки HTTP-запросов. Пример использования здесь.

Но это низкоуровневое решение, вам придется реализовать множество деталей вручную, выбирайте его, только если ваше приложение не очень большое. Если этот подход вам не подходит, вам следует использовать какую-нибудь клиентскую библиотеку SOAP, такую как Axis2 или Spring Web Services (пример здесь).