领导要求使用php建立webservice,开放接口给java客户端使用。没有开发过此类项目,只好从网上下载实例运行。可惜出错了。服务器端:apache2.2, php5.5
客户端:java1.5服务器端php程序如下(rpc_test.php):
<?php 
function rpc_server_func($method, $params) {
 $parameter = $params;
   if ($parameter == "get")
   { 
       $return = 'This data by get method'; 
   }
   else
   {
       $return = 'Not specify method or params';
   } 
   return $return; 
}
?>客户端程序如下:
 import   org.apache.axis.client.Call;   
 import   org.apache.axis.client.Service;   
 import   javax.xml.namespace.QName;   
 import   javax.xml.rpc.ParameterMode;   
 import   javax.xml.soap.MessageFactory;   
    
 public   class   AxisHelloClient   {   
    
public   static   void   main(String[]   args)   {   
  
try{     
String  endpoint="http://localhost/webpos/rpc_test.php";   
Service service=new   Service();   
Call   call=(Call)service.createCall();   
QName  qname=new   QName(endpoint);
call.setOperation(qname,"rpc_server_func");
call.setTargetEndpointAddress(new   java.net.URL(endpoint));//找到服务的URL
String   ret=(String)call.invoke(new   Object[]{"test", "get"});
System.out.println(ret);   
}
catch(Exception e){   
e.printStackTrace();   
  }   
}   
}eclipse3.2中出错信息如下:
AxisFault
 faultCode: {http://schemas.xmlsoap.org/soap/envelope/}Server.userException
 faultSubcode: 
 faultString: org.xml.sax.SAXParseException: Content is not allowed in prolog.
 faultActor: 
 faultNode: 
 faultDetail: 
{http://xml.apache.org/axis/}stackTrace:org.xml.sax.SAXParseException: Content is not allowed in prolog.
at org.apache.xerces.util.ErrorHandlerWrapper.createSAXParseException(Unknown Source)
at org.apache.xerces.util.ErrorHandlerWrapper.fatalError(Unknown Source)
at org.apache.xerces.impl.XMLErrorReporter.reportError(Unknown Source)
at org.apache.xerces.impl.XMLErrorReporter.reportError(Unknown Source)
at org.apache.xerces.impl.XMLScanner.reportFatalError(Unknown Source)
at org.apache.xerces.impl.XMLDocumentScannerImpl$PrologDispatcher.dispatch(Unknown Source)
at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanDocument(Unknown Source)
at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source)
at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source)
at org.apache.xerces.parsers.XMLParser.parse(Unknown Source)
at org.apache.xerces.parsers.AbstractSAXParser.parse(Unknown Source)
at javax.xml.parsers.SAXParser.parse(SAXParser.java:375)
at org.apache.axis.encoding.DeserializationContext.parse(DeserializationContext.java:227)
at org.apache.axis.SOAPPart.getAsSOAPEnvelope(SOAPPart.java:696)
at org.apache.axis.Message.getSOAPEnvelope(Message.java:435)
at org.apache.axis.handlers.soap.MustUnderstandChecker.invoke(MustUnderstandChecker.java:62)
at org.apache.axis.client.AxisClient.invoke(AxisClient.java:206)
at org.apache.axis.client.Call.invokeEngine(Call.java:2784)
at org.apache.axis.client.Call.invoke(Call.java:2767)
at org.apache.axis.client.Call.invoke(Call.java:2443)
at org.apache.axis.client.Call.invoke(Call.java:2366)
at org.apache.axis.client.Call.invoke(Call.java:1812)
at AxisHelloClient.main(AxisHelloClient.java:21) {http://xml.apache.org/axis/}hostname:TB-TESTorg.xml.sax.SAXParseException: Content is not allowed in prolog.
at org.apache.axis.AxisFault.makeFault(AxisFault.java:101)
at org.apache.axis.SOAPPart.getAsSOAPEnvelope(SOAPPart.java:701)
at org.apache.axis.Message.getSOAPEnvelope(Message.java:435)
at org.apache.axis.handlers.soap.MustUnderstandChecker.invoke(MustUnderstandChecker.java:62)
at org.apache.axis.client.AxisClient.invoke(AxisClient.java:206)
at org.apache.axis.client.Call.invokeEngine(Call.java:2784)
at org.apache.axis.client.Call.invoke(Call.java:2767)
at org.apache.axis.client.Call.invoke(Call.java:2443)
at org.apache.axis.client.Call.invoke(Call.java:2366)
at org.apache.axis.client.Call.invoke(Call.java:1812)
at AxisHelloClient.main(AxisHelloClient.java:21)
Caused by: org.xml.sax.SAXParseException: Content is not allowed in prolog.
at org.apache.xerces.util.ErrorHandlerWrapper.createSAXParseException(Unknown Source)
at org.apache.xerces.util.ErrorHandlerWrapper.fatalError(Unknown Source)
at org.apache.xerces.impl.XMLErrorReporter.reportError(Unknown Source)
at org.apache.xerces.impl.XMLErrorReporter.reportError(Unknown Source)
at org.apache.xerces.impl.XMLScanner.reportFatalError(Unknown Source)
at org.apache.xerces.impl.XMLDocumentScannerImpl$PrologDispatcher.dispatch(Unknown Source)
at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanDocument(Unknown Source)
at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source)
at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source)
at org.apache.xerces.parsers.XMLParser.parse(Unknown Source)
at org.apache.xerces.parsers.AbstractSAXParser.parse(Unknown Source)
at javax.xml.parsers.SAXParser.parse(SAXParser.java:375)
at org.apache.axis.encoding.DeserializationContext.parse(DeserializationContext.java:227)
at org.apache.axis.SOAPPart.getAsSOAPEnvelope(SOAPPart.java:696)
... 9 more请问各位能否给出解决方法,是否PHP端程序有问题?

解决方案 »

  1.   

    你好,你可以看一下我的文章,或许对你有用http://levi.bloghome.cn/posts/174853.html(java调用php的webService),这个是昨天刚写的,java是用axis,php是用nusoap
      

  2.   

    你用 php 写的 服务器端就这样一个函数就没有了?或许你需要详细看一下关于使用 php 构建 soap 服务器端的文章,php 手册上 SoapServer 那部分也值得深入研究一下~~
      

  3.   

    XML的转换出问题了,
    你分析一下php返回的xml,
    Java方面好像提取不到你想要的元素。