PHP5中使用Web服务访问J2EE应用程序(2)
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 文档来了解完整的接口规范。

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

Video Face Swap
완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제











웹 개발 분야에서 웹 서비스는 다양한 애플리케이션이 서로 통신하여 보다 복잡하고 강력한 시스템을 구축할 수 있도록 하는 매우 중요한 기술입니다. 이 기사에서는 PHP와 SOAP를 사용하여 웹 서비스 호출 및 개발을 구현하는 방법을 심층적으로 살펴보겠습니다. SOAP(SimpleObjectAccessProtocol)는 서로 다른 애플리케이션 간의 정보 교환에 사용되는 XML 기반 프로토콜입니다. SOAP는 중요한 웹 서비스 표준입니다.

PHP 및 SOAP: 원격 프로시저 호출(RPC) 구현 방법 소개: 최근 몇 년 동안 분산 시스템이 등장하면서 원격 프로시저 호출(RPC)이 웹 개발에 널리 채택되었습니다. 이 기사에서는 PHP와 SOAP를 사용하여 RPC를 구현하는 방법을 소개하고 코드 예제를 통해 사용법을 보여줍니다. 1. 원격 프로시저 호출(RPC)이란 무엇입니까? 원격 프로시저 호출(RemoteProcedureCall, RPC)은 통신입니다.

PHP 및 SOAP: 데이터의 동기 및 비동기 처리 구현 방법 소개: 최신 웹 애플리케이션에서는 데이터의 동기 및 비동기 처리가 점점 더 중요해지고 있습니다. 동기 처리는 한 번에 하나의 요청만 처리하고 다음 요청을 처리하기 전에 요청이 완료될 때까지 기다리는 것을 의미하며, 비동기 처리는 특정 요청이 완료될 때까지 기다리지 않고 동시에 여러 요청을 처리하는 것을 의미합니다. 이 기사에서는 PHP와 SOAP를 사용하여 데이터의 동기 및 비동기 처리를 수행하는 방법을 소개합니다. 1. SOAP SOAP 소개(SimpleObject)

인터넷 기술이 지속적으로 발전함에 따라 데이터와 비즈니스의 상호 작용을 실현하기 위해 점점 더 많은 기업 수준 애플리케이션이 다른 애플리케이션에 대한 인터페이스를 제공해야 합니다. 이 경우 데이터를 전송하고 데이터 무결성과 보안을 보장할 수 있는 안정적인 프로토콜이 필요합니다. SOAP(Simple Object Access Protocol)는 웹 환경에서 애플리케이션 간의 통신을 구현하는 데 사용할 수 있는 XML 기반 프로토콜입니다. 인기 있는 웹 프로그래밍 언어인 PHP

Python을 사용하여 SOAP 메시지 구문 분석 SOAP(Simple Object Access Protocol)는 네트워크의 여러 애플리케이션 간에 통신하는 데 사용되는 XML 기반 RPC(원격 프로시저 호출) 프로토콜입니다. Python은 SOAP 메시지를 처리하기 위한 많은 라이브러리와 도구를 제공하며, 그 중 가장 일반적으로 사용되는 것은 suds 라이브러리입니다. suds는 SOAP 메시지를 구문 분석하고 생성하는 데 사용할 수 있는 Python용 SOAP 클라이언트 라이브러리입니다. 그것은 간단하고

PHP와 SOAP를 사용하여 웹 서비스를 배포 및 게시하는 방법 소개: 오늘날의 인터넷 시대에 웹 서비스의 배포 및 게시는 매우 중요한 주제가 되었습니다. PHP는 널리 사용되는 서버 측 프로그래밍 언어인 반면 SOAP(Simple Object Access Protocol)는 웹 서비스 간 통신에 사용되는 XML 프로토콜입니다. 이 기사에서는 PHP 및 SOAP를 사용하여 웹 서비스를 배포 및 게시하는 방법을 소개하고 몇 가지 코드 예제를 제공합니다.

PHP 및 SOAP를 사용하여 데이터를 압축 및 압축 해제하는 방법 소개: 현대 인터넷 응용 프로그램에서 데이터 전송은 매우 일반적인 작업입니다. 그러나 인터넷 응용 프로그램의 지속적인 개발로 인해 데이터 양이 증가하고 전송 속도에 대한 요구 사항이 합리적으로 증가하고 있습니다. 데이터 압축 및 압축 해제 기술의 사용은 매우 중요한 주제가 되었습니다. PHP 개발에서는 SOAP(SimpleObjectAccessProtocol) 프로토콜을 사용하여 데이터 압축 및 압축 해제를 달성할 수 있습니다. 이 기사에서는 다음 방법을 보여줍니다.

PHP 및 SOAP를 사용하여 웹 기반 애플리케이션 구축에 대한 전체 가이드 오늘날의 인터넷 시대에 웹 기반 애플리케이션은 데이터를 관리하고 상호 작용하는 중요한 도구가 되었습니다. 강력한 개발 언어인 PHP는 다른 기술과 원활하게 통합될 수 있으며, XML 기반 통신 프로토콜인 SOAP(Simple Object Access Protocol)는 웹 서비스를 구축하기 위한 간단하고 표준적이며 확장 가능한 방법을 제공합니다. 이 기사에서는 다음을 제공합니다.
