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 文档来了解完整的接口规范。



본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

Video Face Swap

Video Face Swap

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

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

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

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

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

PHP와 SOAP를 사용하여 웹 서비스 호출 및 개발을 구현하는 방법 PHP와 SOAP를 사용하여 웹 서비스 호출 및 개발을 구현하는 방법 Jun 25, 2023 am 09:59 AM

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

PHP 및 SOAP: 원격 프로시저 호출(RPC) 구현 방법 PHP 및 SOAP: 원격 프로시저 호출(RPC) 구현 방법 Jul 29, 2023 pm 02:45 PM

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

PHP와 SOAP: 데이터의 동기 및 비동기 처리를 달성하는 방법 PHP와 SOAP: 데이터의 동기 및 비동기 처리를 달성하는 방법 Jul 28, 2023 pm 03:29 PM

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

PHP의 SOAP 프로토콜 가이드 PHP의 SOAP 프로토콜 가이드 May 20, 2023 pm 07:10 PM

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

Python을 사용하여 SOAP 메시지 구문 분석 Python을 사용하여 SOAP 메시지 구문 분석 Aug 08, 2023 am 09:27 AM

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

PHP와 SOAP를 사용하여 웹 서비스를 배포하고 게시하는 방법 PHP와 SOAP를 사용하여 웹 서비스를 배포하고 게시하는 방법 Jul 28, 2023 pm 01:57 PM

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

PHP와 SOAP를 사용하여 데이터를 압축 및 압축 해제하는 방법 PHP와 SOAP를 사용하여 데이터를 압축 및 압축 해제하는 방법 Jul 29, 2023 pm 12:28 PM

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

PHP 및 SOAP를 사용하여 웹 기반 애플리케이션을 구축하기 위한 완벽한 가이드 PHP 및 SOAP를 사용하여 웹 기반 애플리케이션을 구축하기 위한 완벽한 가이드 Jul 30, 2023 am 10:25 AM

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

See all articles