私は、.wsdl-URIとJavaの例(以下を参照)を提供しています.SSLをSSL経由で呼び出し、レスポンスを処理する必要があります。私はPHPとZend Frameworkを使用していますが、どこから始めたらいいのか分かりません。以前はC#.NETを使用してSOAPサービスを呼びましたが、ウィザードを使用してサービスをコンフィグレーションした後には2〜3行のコードしか必要としませんでした。この呼び出しを行い、結果のXMLを処理する簡単な方法はありますか?そうでない場合は、どこから始めるのが良い例ですか?Zend Frameworkを使用したSOAP経由のSOAPコール
import javax.xml.soap.MimeHeaders;
import javax.xml.soap.SOAPConnectionFactory;
import javax.xml.soap.SOAPConnection;
import javax.xml.soap.MessageFactory;
import javax.xml.soap.SOAPFault;
import javax.xml.soap.SOAPMessage;
import javax.xml.soap.SOAPPart;
import javax.xml.soap.SOAPEnvelope;
import javax.xml.soap.SOAPBody;
import javax.xml.soap.SOAPElement;
import javax.xml.soap.SOAPHeader;
import javax.xml.xpath.XPath;
import javax.xml.xpath.XPathConstants;
import javax.xml.xpath.XPathExpression;
import javax.xml.xpath.XPathFactory;
public class RegistryDetails {
private static final long serialVersionUID= 1L;
private static final String SERVICE = "https://ServiceProvider.com/TheService.pl";
private static final String TAG_GETPRODUCT = "getDetails";
private static String namespaceService = "http://ServiceProvider.com/TheService.xsd";
private static String namespaceUserSession = "http://ServiceProvider.com/UserSession.xsd";
private static String SYSTEM = "thesystem";
private static String USERNAME = "theusername";
private static String PASSWORD = "thepassword";
public static void main(String[] args) {
try {
//Create the connection
SOAPConnectionFactory soapConnFactory = SOAPConnectionFactory.newInstance();
SOAPConnection connection = soapConnFactory.createConnection();
//Create the actual message
MessageFactory messageFactory = MessageFactory.newInstance();
SOAPMessage message = messageFactory.createMessage();
MimeHeaders mimeHeader = message.getMimeHeaders();
mimeHeader.addHeader("SOAPAction", "");
//Create objects for the message parts
SOAPPart soapPart = message.getSOAPPart();
SOAPEnvelope envelope = soapPart.getEnvelope();
SOAPHeader header = envelope.getHeader();
SOAPElement userSession = header.addChildElement("UserSession", "UserSession", namespaceUserSession);
userSession.addChildElement("TypeOfService").addTextNode("Integrated");
userSession.addChildElement("System").addTextNode(SYSTEM);
userSession.addChildElement("Username").addTextNode(USERNAME);
userSession.addChildElement("Password").addTextNode(PASSWORD);
SOAPBody body = envelope.getBody();
//Populate the body
//Create the main element and namespace
SOAPElement getDetails = body.addChildElement(TAG_GETPRODUCT, "dfg", namespaceService);
getDetails.addChildElement("queryField1").addTextNode("xxx");
getDetails.addChildElement("queryField2").addTextNode("yyy");
getDetails.addChildElement("queryField3").addTextNode("zzz");
//Save the message
message.saveChanges();
//Check the input
System.out.println("\nREQUEST:\n");
message.writeTo(System.out);
System.out.println();
//Send the message and get a reply
//Send the message
SOAPMessage reply = connection.call(message, SERVICE);
System.out.println("\nRESPONSE:\n");
reply.writeTo(System.out);
System.out.println();
{
SOAPBody retbody = reply.getSOAPBody();
if (retbody.hasFault()) {
SOAPFault fault = retbody.getFault();
System.out.println("SOAPfault: " + fault.getFaultString());
}
else {
XPathFactory factory = XPathFactory.newInstance();
XPath xpath = factory.newXPath();
XPathExpression expr = xpath.compile("*/RESULT/HOV/ReturnField1");
String returnField1 = (String)expr.evaluate(retbody, XPathConstants.STRING);
System.out.println("Result: " + returnField1);
}
}
//Close the connection
connection.close();
} catch (Exception e) {
System.out.println(e.getMessage());
}
}
}
何を試してみましたか?あなたの試行と出力のPHPコード例を投稿してください... – danielrsmith
どこから始めたらいいか分かりません。 Timがコメントしたように、zend.comとしてのドキュメントがありますが、私がやっていることには何も適用されません。名前付きパラメータをSOAP関数呼び出しに送信する方法は? Javaのように異なるノードを追加するにはどうすればよいですか?私は試したことを示すために、この例に基づいて単純な3行を書くつもりですが、この議論にどれだけの価値があるかは分かりません。つまり、Java-examplesではどこにでもWSDLファイルを使用していません。 – rymored
'Zend_Soap_Client'は一般的なPHPの' SoapClient'を拡張し、そのドキュメントを見ています。http://us3.php.net/manual/en/soapclient.soapclient.php – danielrsmith