一路拾遺
          Collect By Finding All The Way ......
          posts - 81,comments - 41,trackbacks - 0
          首先說一下使用AXIS調(diào)用WSDL文件時需要的JAR包:
          (1)axis    其中包括axis.jar、axis-ant.jar、commons-discovery-0.2.jar、commons-logging-1.0.4.jar、jaxrpc.jar、log4j-1.2.8.jar、log4j.properties、saaj.jar、wsdl4j-1.5.1.jar。http://www.apache.org/dyn/closer.cgi/ws/axis/
          (2)javamail    mail.jar。http://java.sun.com/products/javamail/
          (3)jaf    activation.jar。http://java.sun.com/javase/technologies/desktop/javabeans/jaf/downloads/index.html
          一、WSDL文件內(nèi)容
          該實例采用的WSDL文件是使用AXIS創(chuàng)建的Web服務(wù),功能是輸入字符串,返回歡迎語句。對于遠(yuǎn)程(其他服務(wù)器)的Web服務(wù)的調(diào)用一直不成功,原本想調(diào)用下DictionaryService.wsdl,可是運行時總是返回“ faultString: org.xml.sax.SAXException: Bad envelope tag:  definitions”錯誤,實在無奈、、、Hello.jws的內(nèi)容如下:
          <?xml version="1.0" encoding="UTF-8" ?> 
          <wsdl:definitions targetNamespace="http://localhost:8080/axis/Hello.jws" xmlns:apachesoap="http://xml.apache.org/xml-soap" xmlns:impl="http://localhost:8080/axis/Hello.jws" xmlns:intf="http://localhost:8080/axis/Hello.jws" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:wsdlsoap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
          <!-
          WSDL created by Apache Axis version: 1.4
          Built on Apr 22, 2006 (06:55:48 PDT)
            --
          > 
          <wsdl:message name="helloResponse">
            
          <wsdl:part name="helloReturn" type="xsd:string" /> 
            
          </wsdl:message>
          <wsdl:message name="helloRequest">
            
          <wsdl:part name="name" type="xsd:string" /> 
            
          </wsdl:message>
          <wsdl:portType name="Hello">
          <wsdl:operation name="hello" parameterOrder="name">
            
          <wsdl:input message="impl:helloRequest" name="helloRequest" /> 
            
          <wsdl:output message="impl:helloResponse" name="helloResponse" /> 
            
          </wsdl:operation>
            
          </wsdl:portType>
          <wsdl:binding name="HelloSoapBinding" type="impl:Hello">
            
          <wsdlsoap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http" /> 
          <wsdl:operation name="hello">
            
          <wsdlsoap:operation soapAction="" /> 
          <wsdl:input name="helloRequest">
            
          <wsdlsoap:body encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="http://DefaultNamespace" use="encoded" /> 
            
          </wsdl:input>
          <wsdl:output name="helloResponse">
            
          <wsdlsoap:body encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="http://localhost:8080/axis/Hello.jws" use="encoded" /> 
            
          </wsdl:output>
            
          </wsdl:operation>
            
          </wsdl:binding>
          <wsdl:service name="HelloService">
          <wsdl:port binding="impl:HelloSoapBinding" name="Hello">
            
          <wsdlsoap:address location="http://localhost:8080/axis/Hello.jws" /> 
            
          </wsdl:port>
            
          </wsdl:service>
            
          </wsdl:definitions>

          二、調(diào)用Web服務(wù)
          據(jù)說有三種方法,參見:http://blog.csdn.net/boy_wh520/archive/2007/05/09/1601756.aspx
          http://www.ibm.com/developerworks/cn/webservices/ws-startaxis/index.html
          這里只介紹一下第一種方法,代碼如下:
          package wsdl;

          import org.apache.axis.client.Call;
          import org.apache.axis.client.Service;

          public class CallService {

              
          public static void main(String[] args) {

                  
          try {
                                 
                      String endpoint 
          = "http://localhost:8080/axis/Hello.jws";

                      
          //調(diào)用過程
                      Service service = new Service();
                      
                      Call call 
          = (Call) service.createCall();
                      
                      call.setTargetEndpointAddress(
          new  java.net.URL(endpoint));
                      
                      call.setOperationName(
          "hello");//WSDL里面描述的操作名稱
                      
                      call.addParameter(
          "helloRequest", org.apache.axis.encoding.XMLType.XSD_STRING, javax.xml.rpc.ParameterMode.IN);//操作的參數(shù)
                      
                      call.setReturnType(org.apache.axis.encoding.XMLType.XSD_STRING);
          //設(shè)置返回類型  
                      
                      call.setUseSOAPAction( 
          true );
                      
                      
          //給方法傳遞參數(shù),并且調(diào)用方法
                      String temp = "Tom";
                      Object[] obj 
          = new Object[]{temp};
                      String result 
          = (String)call.invoke(obj);
                      
                      System.out.println(
          "Result is : "+result);
                      }
           catch (Exception e) {
                          e.printStackTrace();
                      }

              }

          }


          posted on 2008-08-04 21:48 胖胖泡泡 閱讀(9693) 評論(3)  編輯  收藏

          FeedBack:
          # re: 使用AXIS調(diào)用WSDL描述的Web服務(wù)[未登錄]
          2008-09-07 22:15 | dong
          你這個問題解決了沒?我也遇到了,不知道改如何做,如果解決了發(fā)心信息到我郵箱吧,hsd6181000@163.com  回復(fù)  更多評論
            
          # re: 使用AXIS調(diào)用WSDL描述的Web服務(wù)
          2008-09-08 09:25 | 胖胖泡泡
          問題已解決 參見 使用AXIS調(diào)用WSDL描述的Web服務(wù)(續(xù)) http://www.aygfsteel.com/mrcold/archive/2008/08/05/220121.html  回復(fù)  更多評論
            
          # re: 使用AXIS調(diào)用WSDL描述的Web服務(wù)
          2009-06-17 22:48 | xc
          @胖胖泡泡
          這里是加?WSDL的目的
          “?WSDL: Obtaining WSDL for deployed services
          When you make a service available using Axis, there is typically a unique URL associated with that service. For JWS files, that URL is simply the path to the JWS file itself. For non-JWS services, this is usually the URL "http://<host>/axis/services/<service-name>".

          If you access the service URL in a browser, you'll see a message indicating that the endpoint is an Axis service, and that you should usually access it using SOAP. However, if you tack on "?wsdl" to the end of the URL, Axis will automatically generate a service description for the deployed service, and return it as XML in your browser (try it!). The resulting description may be saved or used as input to proxy-generation, described next. You can give the WSDL-generation URL to your online partners, and they'll be able to use it to access your service with toolkits like .NET, SOAP::Lite, or any other software which supports using WSDL.

          You can also generate WSDL files from existing Java classes (see Java2WSDL: Building WSDL from Java).

            回復(fù)  更多評論
            

          只有注冊用戶登錄后才能發(fā)表評論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 紫阳县| 临沭县| 杂多县| 洮南市| 鹿泉市| 阳谷县| 通江县| 泰州市| 郑州市| 芒康县| 内丘县| 漳浦县| 东至县| 荔浦县| 银川市| 玛多县| 同仁县| 平南县| 云浮市| 无棣县| 乳山市| 苏州市| 哈巴河县| 四川省| 平阴县| 黎城县| 洛浦县| 宣威市| 无锡市| 洪雅县| 肥西县| 禄劝| 原阳县| 卢湾区| 当雄县| 新巴尔虎左旗| 顺昌县| 孟连| 海伦市| 响水县| 都匀市|