Home  >  Article  >  Backend Development  >  JAVA调用PHP SOAP服务方法

JAVA调用PHP SOAP服务方法

WBOY
WBOYOriginal
2016-06-20 13:00:561038browse

JAVA调用PHP SOAP服务

WebService即是一种跨平台的远程调用方法。一方提供服务,另一方使用服务。传输协议是HTTP,而传输的数据则是XML格式的数据。

它有两种方式,WSDL和SOAP。目前仅提及SOAP。

1.PHP提供SOAP服务

定义一个类,它里面有加、减和除三种操作

 

<?php class Operator{
    public function add($x,$y){
        return $x+$y;
    }
    public function substract($x,$y){
        return $x-$y;
    }
    public function divide($x,$y){
        return $x/$y;
    }
}
?>


使用PHP SOAP API,提供SOAP服务。(需要开启SOAP EXTENSION)

 

<?php require("Operator.php");
$server = new SoapServer(null,array('uri' => "http://localhost:8089"));
$server->setClass("Operator");
$server->handle();
?>


假设提供服务的php为index.php

2.JAVA使用PHP提供的SOAP服务

 

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import javax.xml.soap.MessageFactory;
import javax.xml.soap.Node;
import javax.xml.soap.SOAPBody;
import javax.xml.soap.SOAPConnection;
import javax.xml.soap.SOAPConnectionFactory;
import javax.xml.soap.SOAPElement;
import javax.xml.soap.SOAPEnvelope;
import javax.xml.soap.SOAPException;
import javax.xml.soap.SOAPMessage;
import javax.xml.soap.SOAPPart;
public class Main {
	public void testSOAP(String opename,int x,int y){
		String url = "http://localhost:8089/index.php";
		SOAPConnectionFactory soapConnectionFactory = null;
		SOAPConnection soapConnection = null;
		MessageFactory messageFactory = null;
		SOAPMessage soapMessage = null;
		SOAPPart soapPart = null;
		SOAPEnvelope soapEnvelope = null;
		SOAPBody body = null;
		try{
			//建立连接
			soapConnectionFactory = SOAPConnectionFactory.newInstance();
			soapConnection = soapConnectionFactory.createConnection();
			messageFactory = MessageFactory.newInstance();
			soapMessage = messageFactory.createMessage();
			soapPart = soapMessage.getSOAPPart();
			soapEnvelope = soapPart.getEnvelope();
		
			//设置调用的webservice方法,及传参
			body = soapEnvelope.getBody();
			SOAPElement element = body.addChildElement(soapEnvelope.createName(opename));
			element.addChildElement("in0").addTextNode(String.valueOf(x));
			element.addChildElement("in1").addTextNode(String.valueOf(y));
			soapMessage.saveChanges();
			
			//获取返回值
			SOAPMessage reply = soapConnection.call(soapMessage,url);
			soapPart = reply.getSOAPPart();
			soapEnvelope = soapPart.getEnvelope();
			body = soapEnvelope.getBody();
			Node returnvalue = (Node) body.getChildElements().next();
		
			if (returnvalue != null) {
	              if (returnvalue.getChildNodes().item(0).getNodeName().equals("return")) {
		              List<hashmap>> ReturnArray = new ArrayList<hashmap>>();
		              for (int i=0;i<returnvalue.getchildnodes string key="returnvalue.getChildNodes().item(0).getChildNodes().item(i).getNodeName();" value="returnvalue.getChildNodes().item(0).getChildNodes().item(i).getNodeValue();" system.out.println else returned ex ex.printstacktrace try soapconnection.close catch e todo auto-generated block e.printstacktrace public static void main args main.testsoap>

<p><br>
运行结果如下:</p>

<p>3+4:<br>
#text:7<br>
9-7:<br>
#text:2<br>
20/4:<br>
#text:5</p>
<p class="item-note"><br></p></returnvalue.getchildnodes></hashmap></hashmap>
Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn