前几天我开始使用自己的WebServices。我决定使用WSO2 WSF / PHP框架并根据http://wso2.org/project/wsf/php/2.0.0/docs/manual.html创建我的第一个helloService。这是代码:
function greet($message) {
$responsePayloadString = <<<XML
<greetResponse>Hello Client!</greetResponse>
XML;
$returnMessage = new WSMessage($responsePayloadString);
return $returnMessage;
}
$service = new WSService(array("operations" => array("greet")));
$service->reply();
我已将它部署在我的服务器上并尝试使用简单的helloClient(在wso2 wsf / php手册中描述)和SoapUI调用它 - 一切正常。 现在我会尝试在我的WSO2 ESB上部署它,所以我已经定义了这样的新代理服务:
<proxy name="helloService" transports="https http" startOnLoad="true" trace="disable">
<target endpoint="helloService">
<inSequence>
<log level="full"/>
</inSequence>
<outSequence>
<filter xpath="get-property('FAULT')">
<then>
<log level="full" category="WARN" separator=",">
<property name="message" value="SOAP Fault detected"/>
</log>
</then>
<else/>
</filter>
<send/>
</outSequence>
<faultSequence>
<log level="full">
<property name="MESSAGE" value="Executing default 'fault' sequence"/>
<property name="ERROR_CODE" expression="get-property('ERROR_CODE')"/>
<property name="ERROR_MESSAGE" expression="get-property('ERROR_MESSAGE')"/>
</log>
<drop/>
</faultSequence>
</target>
<publishWSDL uri="http://myAPIAddress/helloService.php?wsdl"/>
</proxy>
<endpoint name="helloService">
<address uri="http://myAPIAddress/helloService.php" format="soap11"/>
</endpoint>
在ESB管理控制台的“已部署的服务”列表中可以看到新服务,我可以从myESBaddress获取WSDL:8280 / services / helloService?wsdl,myESBaddress:8280 / services列表中的一切看起来都很好。但是,当我想使用“试用此服务”选项时,会出现超时错误。我尝试使用SoapUI调用我的WS - 对端点myESBaddress的请求:8280 / services / helloService看起来像(当我将它发送到myAPIAddress / helloService.php时,同样的请求工作正常)
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.wso2.org/php/xsd">
<soapenv:Header/>
<soapenv:Body>
<greet>asdfasdfas</greet>
</soapenv:Body>
</soapenv:Envelope>
不幸的是,作为回应,我有一个错误:
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
<soapenv:Body>
<soapenv:Fault>
<faultcode>411</faultcode>
<faultstring>Unexpected response received. HTTP response code : 411 HTTP status : Length Required exception : First Element must contain the local name, Envelope , but found html</faultstring>
<detail>Unexpected response received. HTTP response code : 411 HTTP status : Length Required exception : First Element must contain the local name, Envelope , but found html</detail>
</soapenv:Fault>
</soapenv:Body>
</soapenv:Envelope>
我错了什么?我觉得,这是完全愚蠢和明显的事情,所以请原谅我,如果这是新手问题,但经过几天寻找解决方案,我真的很绝望。
PS。对不起我的英语,这不是我的母语
答案 0 :(得分:0)
最后,我得到了它的工作!问题是由HTTP版本引起的。这是解决方案:
...
<inSequence>
<log level="full"/>
<property name="FORCE_HTTP_1.0" value="true" scope="axis2" type="BOOLEAN"/>
</inSequence>
...
希望,有一天会对某人有所帮助。
答案 1 :(得分:0)
你的php服务有哪些类型?
How to Invoke External PHP Web Services with WSO2 ESB
我遇到了同样的问题,但我已将服务器更改为Apache,问题解决了。