Rumah php教程 php手册 PHP5中使用Web服务访问J2EE应用程序(2)

PHP5中使用Web服务访问J2EE应用程序(2)

Jun 21, 2016 am 09:08 AM
soap soapclient weather

j2ee|php5|web|web服务|程序|访问

PHP Weather 客户机

  这一节将建立我们自己的 PHP Weather 客户机。这里提供了一些代码片段,建议下载完整的客户机和 WSDL 文件。

  用于表示 Weather Service 的 ext/soap 类是 SoapClient。正如我们介绍 Weather Forecast 应用程序时所讨论的,我们知道应用服务器在 http://host:port/ItsoWebServer2RouterWeb/wsdl/itso/session/WeatherForecastEJB.wsdl 中提供了 WSDL。我们使用的是默认端口,并且在作为服务器的计算机上工作,这样就可以通过查找 WSDL 文件创建第一个 SoapClient:

<?php
$soapClient = new SoapClient("http://localhost:9080/" .
"ItsoWebService2RouterWeb/wsdl/itso/session/WeatherForecastEJB.wsdl");
?>
  注意,因为 ext/soap 是内置的,所以,在引用 SoapClient 之前,不需要任何 include 或 require 语句。

  现在已经实例化了客户机,还要联系 Weather 服务,并调用它的 getForecast 操作。在 WSDL 模式下使用 SoapClient 时,ext/soap 有一种很好的特性,即可以直接引用远程操作,就像它是 SoapClient 自身的函数一样。但是在建立输入参数时需要一点技巧。ext/soap 可以提供从 WSDL 中发现的操作和参数的数组:

$functions = $soapClient->__getFunctions();
print_r($functions);
$types = $soapClient->__getTypes();
print_r($types);
  只需要显示与 getForecast 相关的结果,并重新格式化这些结果,以方便阅读,于是我们看到以下代码:

getForecastResponse getForecast(getForecast $parameters)

struct getForecast {
dateTime startDate;
int days;
}

struct getForecastResponse {
Weather getForecastReturn;
}

struct Weather {
string condition;
dateTime date;
string windDirection;
int windSpeed;
int temperatureCelsius;
boolean dbflag;
}
  ext/soap 实际上并没有为我们定义 getForecast 类,我们必须创建该操作所需要的输入参数数组:

$getForecastParam = array('startDate' =>time(), 'days' => 3);
  然后像 SoapClient 的方法那样调用该操作:

$forecastResponse = $soapClient->getForecast($getForecastParam);
  最后我们得到了返回的 getForecastResponse 对象,它本身是一个 Weather 对象数组,然后在表格中显示结果:

echo "<table border=1 cellpadding=5>";
echo "<tr><th>Date</th><th>Condition</th><th>Temperature</th><th>Wind</th></tr>";
$weatherArray = $forecastResponse->getForecastReturn;
foreach ($weatherArray as $weather) {
echo "<tr>",
"<td>",strftime("%a. %b %d, %Y", strtotime($weather->date)),"</td>",
"<td>$weather->condition</td>",
"<td>$weather->temperatureCelsius</td>",
"<td>$weather->windDirection $weather->windSpeed</td>",
"</tr>";
}
echo "</table>";
  PHP 客户机与 Java 客户机的输出相同,于是我们知道圣诞节期间 San Jose 不会下雪……

图 3. PHP WeatherClient


  观察 SOAP 流

  我们成功地与 Weather 服务取得了联系,并显示了结果。但是如果出现错误,得不到预期的结果,该怎么办?ext/soap 可以显示客户机与服务器之间交换的 SOAP 消息,能够帮助我们确定问题所在。

  只有使用 trace 选项创建 SoapClient 时,才要使用跟踪功能。我们在 options 数组参数中设置 trace 选项,将该参数传递给 SoapClient 构造函数。我们将构造函数的使用改为:

$soapClient = new SoapClient("http://localhost:9080/" .
"ItsoWebService2RouterWeb/wsdl/itso/session/WeatherForecastEJB.wsdl",
array('trace' => 1));
  并在调用 goForecast 之后调用 trace 方法:

echo "Request :<br>", htmlspecialchars($soapClient->__getLastRequest()), "<br>";
echo "Response :<br>", htmlspecialchars($soapClient->__getLastResponse()), "<br>";
  一定要使用 htmlspecialchars 内置函数对 trace 输出进行编码,因为它将 SOAP xml 分界符转换成特殊字符,如
  下面是某个请求的 trace 输出:

<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:ns1="http://session.itso">
<SOAP-ENV:Body>
<ns1:getForecast>
<ns1:startDate>2004-11-30T13:41:59</ns1:startDate>
<ns1:days>0</ns1:days>
</ns1:getForecast>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
  对应的应答是:

<?xml version="1.0" encoding="UTF-8"?>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<soapenv:Body>
<getForecastResponse xmlns="http://session.itso">
<getForecastReturn xmlns:ns-239399687="http://mapping.itso">
<ns-239399687:condition>sunny</ns-239399687:condition>
<ns-239399687:date>2004-11-30T00:00:00.000Z</ns-239399687:date>
<ns-239399687:windDirection>W</ns-239399687:windDirection>
<ns-239399687:windSpeed>18</ns-239399687:windSpeed>
<ns-239399687:temperatureCelsius>6</ns-239399687:temperatureCelsius>
<ns-239399687:dbflag>1</ns-239399687:dbflag>
</getForecastReturn>
</getForecastResponse>
</soapenv:Body>
</soapenv:Envelope>
  如果在开启跟踪功能的情况下运行客户机来收集这些输出,那么需要将 days 参数设置为 0,只有这样做,SOAP 应答才会输出较少的行。但是我们遇到了没有预料到的行为。我们本来期望 getForecastResponse 和以前一样是一个 Weather 对象数组,但是它应该只有一个元素,而不是 4 个元素。然而,它被转换成了一个简单的 Weather 对象,我们必须根据这种行为进行编码,就像您在最终的示例 PHP 客户机代码中看到的那样。这与 Java 客户机的行为有所不同,在客户机行为中,getForecast 总是返回 Weather 对象数组,无论服务器响应中有多少个 Weather 对象。SoapClient::_getTypes() 输出并没有为我们理解这种差异提供足够的细节,因此我们要求助于 WSDL 文档来了解完整的接口规范。



Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

Video Face Swap

Video Face Swap

Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas

Tutorial Java
1662
14
Tutorial PHP
1261
29
Tutorial C#
1234
24
Cara menggunakan PHP dan SOAP untuk melaksanakan penyeruan dan pembangunan perkhidmatan Web Cara menggunakan PHP dan SOAP untuk melaksanakan penyeruan dan pembangunan perkhidmatan Web Jun 25, 2023 am 09:59 AM

Dalam bidang pembangunan Web, perkhidmatan Web adalah teknologi yang sangat penting yang membolehkan aplikasi yang berbeza berkomunikasi antara satu sama lain untuk membina sistem yang lebih kompleks dan berkuasa. Dalam artikel ini, kami akan melihat secara mendalam tentang cara menggunakan PHP dan SOAP untuk melaksanakan permohonan dan pembangunan perkhidmatan web. SOAP (SimpleObjectAccessProtocol) ialah protokol berasaskan XML yang digunakan untuk pertukaran maklumat antara aplikasi yang berbeza. SOAP ialah standard perkhidmatan Web yang penting

PHP dan SOAP: Bagaimana untuk mencapai pemprosesan data segerak dan tak segerak PHP dan SOAP: Bagaimana untuk mencapai pemprosesan data segerak dan tak segerak Jul 28, 2023 pm 03:29 PM

PHP dan SOAP: Bagaimana untuk melaksanakan pemprosesan data segerak dan tak segerak Pengenalan: Dalam aplikasi web moden, pemprosesan data segerak dan tak segerak menjadi semakin penting. Pemprosesan segerak merujuk kepada memproses hanya satu permintaan pada satu-satu masa dan menunggu penyiapan permintaan sebelum memproses permintaan seterusnya merujuk kepada memproses berbilang permintaan pada masa yang sama tanpa menunggu penyiapan permintaan tertentu. Dalam artikel ini, kami akan memperkenalkan cara menggunakan PHP dan SOAP untuk mencapai pemprosesan data segerak dan tak segerak. 1. Pengenalan kepada SOAP SOAP (SimpleObject

PHP dan SOAP: Cara Melaksanakan Panggilan Prosedur Jauh (RPC) PHP dan SOAP: Cara Melaksanakan Panggilan Prosedur Jauh (RPC) Jul 29, 2023 pm 02:45 PM

PHP dan SOAP: Cara melaksanakan Panggilan Prosedur Jauh (RPC) Pengenalan: Dalam beberapa tahun kebelakangan ini, dengan peningkatan sistem teragih, Panggilan Prosedur Jauh (RPC) telah diterima pakai secara meluas dalam pembangunan Web. Artikel ini akan memperkenalkan cara melaksanakan RPC menggunakan PHP dan SOAP, dan menunjukkan penggunaannya melalui contoh kod. 1. Apakah panggilan prosedur jauh (RPC)? Panggilan prosedur jauh (RemoteProcedureCall, RPC) ialah komunikasi

Panduan Protokol SOAP dalam PHP Panduan Protokol SOAP dalam PHP May 20, 2023 pm 07:10 PM

Dengan pembangunan berterusan teknologi Internet, semakin banyak aplikasi peringkat perusahaan perlu menyediakan antara muka kepada aplikasi lain untuk merealisasikan interaksi data dan perniagaan. Dalam kes ini, kami memerlukan protokol yang boleh dipercayai untuk menghantar data dan memastikan integriti dan keselamatan data. SOAP (Simple Object Access Protocol) ialah protokol berasaskan XML yang boleh digunakan untuk melaksanakan komunikasi antara aplikasi dalam persekitaran Web. Sebagai bahasa pengaturcaraan web yang popular, PHP

Menghuraikan mesej SOAP menggunakan Python Menghuraikan mesej SOAP menggunakan Python Aug 08, 2023 am 09:27 AM

Menghuraikan mesej SOAP menggunakan Python SOAP (Simple Object Access Protocol) ialah protokol panggilan prosedur jauh (RPC) berasaskan XML yang digunakan untuk berkomunikasi antara aplikasi yang berbeza pada rangkaian. Python menyediakan banyak perpustakaan dan alatan untuk memproses mesej SOAP, yang paling biasa digunakan ialah perpustakaan suds. suds ialah perpustakaan klien SOAP untuk Python yang boleh digunakan untuk menghuraikan dan menjana mesej SOAP. Ia menyediakan mudah dan

Bagaimana untuk memampatkan dan menyahmampat data menggunakan PHP dan SOAP Bagaimana untuk memampatkan dan menyahmampat data menggunakan PHP dan SOAP Jul 29, 2023 pm 12:28 PM

Cara menggunakan PHP dan SOAP untuk memampatkan dan menyahmampat data Pengenalan: Dalam aplikasi Internet moden, penghantaran data adalah operasi yang sangat biasa Walau bagaimanapun, dengan pembangunan berterusan aplikasi Internet, peningkatan dalam jumlah data dan keperluan untuk kelajuan penghantaran, secara munasabah penggunaan teknik pemampatan dan penyahmampatan data telah menjadi topik yang sangat penting. Dalam pembangunan PHP, kita boleh menggunakan protokol SOAP (SimpleObjectAccessProtocol) untuk mencapai pemampatan dan penyahmampatan data. Artikel ini akan menunjukkan kepada anda bagaimana untuk

Cara menggunakan PHP dan SOAP untuk menggunakan dan menerbitkan perkhidmatan web Cara menggunakan PHP dan SOAP untuk menggunakan dan menerbitkan perkhidmatan web Jul 28, 2023 pm 01:57 PM

Cara menggunakan PHP dan SOAP untuk menggunakan dan menerbitkan perkhidmatan Web Pengenalan: Dalam era Internet hari ini, penggunaan dan penerbitan perkhidmatan Web telah menjadi topik yang sangat penting. PHP ialah bahasa pengaturcaraan sebelah pelayan yang popular, manakala SOAP (Simple Object Access Protocol) ialah protokol XML yang digunakan untuk komunikasi antara perkhidmatan web. Artikel ini akan memperkenalkan anda kepada cara menggunakan PHP dan SOAP untuk menggunakan dan menerbitkan perkhidmatan web, serta menyediakan beberapa contoh kod.

Panduan lengkap untuk membina aplikasi berasaskan web dengan PHP dan SOAP Panduan lengkap untuk membina aplikasi berasaskan web dengan PHP dan SOAP Jul 30, 2023 am 10:25 AM

Panduan lengkap untuk membina aplikasi berasaskan web menggunakan PHP dan SOAP Dalam era Internet hari ini, aplikasi berasaskan web telah menjadi alat penting untuk mengurus dan berinteraksi dengan data. Sebagai bahasa pembangunan yang berkuasa, PHP boleh disepadukan dengan lancar dengan teknologi lain, manakala SOAP (Simple Object Access Protocol), sebagai protokol komunikasi berasaskan XML, memberikan kami kaedah yang mudah, standard dan boleh dikembangkan untuk membina perkhidmatan Web. Artikel ini akan memberikan anda

See all articles