2012-03-15 12 views
-1

私は、.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()); 
     } 
    } 
} 
+0

何を試してみましたか?あなたの試行と出力のPHPコード例を投稿してください... – danielrsmith

+0

どこから始めたらいいか分かりません。 Timがコメントしたように、zend.comとしてのドキュメントがありますが、私がやっていることには何も適用されません。名前付きパラメータをSOAP関数呼び出しに送信する方法は? Javaのように異なるノードを追加するにはどうすればよいですか?私は試したことを示すために、この例に基づいて単純な3行を書くつもりですが、この議論にどれだけの価値があるかは分かりません。つまり、Java-examplesではどこにでもWSDLファイルを使用していません。 – rymored

+0

'Zend_Soap_Client'は一般的なPHPの' SoapClient'を拡張し、そのドキュメントを見ています。http://us3.php.net/manual/en/soapclient.soapclient.php – danielrsmith

答えて

0

http://framework.zend.com/manual/en/zend.soap.client.html - あなたのWSDLのURLを渡すと、必要に応じて、あなたは電話をかけることができます。

+0

私は、私が達成しようとしていることに関連する何も見つけることなく、zend.comのドキュメントを読んできました。パラメータをどのように送信できますか?異なるパーツ(userSessionとgetDetails)の情報を指定するにはどうすればよいですか? WSDLはこれを処理しますか? – rymored

+0

Javaの例はあまり明確ではありません - Webサービス自体のための他のドキュメントはありますか? –

+0

私はいくつかのドキュメントを持っていますが、サービスプロバイダーとの秘密保持契約のためにコンテンツを書き直すことなく共有することはできません。明日はこれをやろうとしていますが、それまでは、複数のパラメータを使ってSOAPサービスを呼び出し、戻り値のXMLノードをPHP変数に抽出する具体的な例がありますか?私は、SOAP呼び出しがどのように行われ、応答が処理されるかを理解すれば、テストを開始し、残りの部分を自分自身から把握できると思います。 – rymored