0

些細な問題を解決するのを妨げている概念的な問題があります。オブジェクトを Web サービスに送信する必要があります。エンドポイントがあり、オブジェクトをシリアル化できるコードがあるので、シリアル化されたオブジェクトを含む org.jdom.Document または byte[] オブジェクトを作成できます。

また、axis2 を使用して Web サービスを呼び出すクライアント スニペットを作成することもできます。最後に、手動で作成したメッセージをWebサービスに送信しようとしました(WSDLはありません;()そして、Charlesを使用して何が送信されるか(リクエスト)を確認しました)。

どうすればよいかわからないのは、byte[] または org.jdom.Document オブジェクトを OMElement オブジェクトに変換することです。明らかに、serviceClient.sendReceive(elem) は OMElement パラメータを取ります。

これまでに試したことは次のとおりです(送信したOMElementが送信されると確信したら、送信したOMElementを削除しました):

package testAxis2Client01;

import java.util.Map;

import javax.xml.stream.XMLStreamException;

import org.apache.axiom.om.OMAbstractFactory;
import org.apache.axiom.om.OMElement;
import org.apache.axiom.om.OMFactory;
import org.apache.axiom.om.OMNamespace;
import org.apache.axiom.soap.SOAPEnvelope;
import org.apache.axis2.addressing.EndpointReference;
import org.apache.axis2.client.Options;
import org.apache.axis2.client.ServiceClient;
import org.apache.axis2.transport.http.HTTPConstants;

public class testAxis2Client01 {

               private static final int MXMOCONNECTIONTIMEOUT = 2;//don't really know what this should be.
               /**
               * @param args
               */
               public static void main(String[] args) {
                              try {
                                             callAxisWS();
                              } catch (XMLStreamException e) {
                                             e.printStackTrace();
                              } catch (Exception e) {
                                             e.printStackTrace();
                              }

               }
public static void callAxisWS() throws XMLStreamException, Exception {

                              //Axis2 client code to call a WS

                              OMElement response=null;
                              try{
                                             OMFactory factory = OMAbstractFactory.getSOAP11Factory();
                                             SOAPEnvelope theEnvelope = OMAbstractFactory.getSOAP12Factory().getDefaultEnvelope();
                                             theEnvelope.declareNamespace("http://www.w3.org/2001/XMLSchema","xsd");
                                             theEnvelope.declareNamespace("http://www.w3.org/2001/XMLSchema-instance","xsi");

                                             ServiceClient serviceClient = new ServiceClient();
                                             Options options = serviceClient.getOptions();
                                             options.setProperty(HTTPConstants.AUTO_RELEASE_CONNECTION, true);               // Another API to release connection.
                                             options.setTimeOutInMilliSeconds(10000); // Setting the connection timeout.
                                             EndpointReference targetEPR = new EndpointReference(theUrl);
                                             options.setTo(targetEPR);
                                             options.setAction("processDocument");

                                             serviceClient.setOptions(options);
                                             //response = serviceClient.sendReceive(myOMElement);
                                             response = serviceClient.sendReceive(elem)
                                             if (response != null) {
                                                            System.out.println("SUCCESS!!");
                                                            System.out.println(response.toStringWithConsume());
                                             }
                              }catch(Exception af){
                                            af.printStackTrace();
                                            System.out.println(af.getMessage());
                              }

               }
}
4

1 に答える 1

0

axis2 を使用するポイントは、すべてを処理することです。wsdl ファイルを提供するだけで、クライアント スタブが生成されます。オリジナルの wsdl がない場合でも、自分で作成できます。

最善の方法は、wsdl ファイルを手動で作成し、クライアント スタブを生成して、スタブを直接呼び出すことです。

于 2013-10-31T20:54:57.657 に答える