国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

開通VIP
享受JAVA的空氣: Java中調用WebService
 
8月24日

Java中調用WebService

  今天被一個問題搞得挺郁悶得。整整弄了一天也沒有得出個結果。項目中要調用一個webservice,
傳入一個姓名,輸出一串字符串。之前我也沒有太多經(jīng)驗,網(wǎng)上找了些許資料,大概得參考了一下,自己
編寫了幾個類。大致如下:
 
package cn.sh.ideal.util;
import java.io.*;
import java.net.*;
import javax.xml.parsers.*;
import org.w3c.dom.*;
 

public class RTXWebservice {
    private final static String ServiceURI="http://12.110.250.18/RTXMessageWebService/MessageRTX.asmx";
    public RTXWebservice() {
        try {
            jbInit();
        }
        catch (Exception ex) {
            ex.printStackTrace();
        }
    }
    private static String getSoapRequest(String name){//name為要查詢的人名
        try
         {
             Class cls=Object.class;


             FileReader isr = new FileReader("../src/cn/sh/ideal/xml/rtxsoap.xml");
             BufferedReader reader=new BufferedReader(isr);
             String soap="";
             String tmp;
                         while((tmp=reader.readLine())!=null)
             {
                 soap+=tmp;
                 System.out.println("soap1:"+soap);
             }
             reader.close();
             isr.close();

             return soap.replaceAll("name",name);//用傳入的參數(shù)name替換原來xml中的name
         }
         catch (Exception ex)
         {
             ex.printStackTrace();
             return null;
         }
    }
    /*
    *返回InputStream是因為w3c DOM中Document的parse方法可
    *以接受InputStream類型的參數(shù),方面在下一步對XML的解釋
    */
    private static InputStream getSoapInputStream(String name)throws Exception
    {
        try
        {
            String soap=getSoapRequest(name);

            if(soap==null)
            {
                return null;
            }
            URL url=new URL(ServiceURI);
            URLConnection conn=url.openConnection();
            conn.setUseCaches(false);
            conn.setDoInput(true);
            conn.setDoOutput(true);
            conn.setRequestProperty("Content-Length", Integer.toString(soap.length()));
            conn.setRequestProperty("Content-Type", "text/xml; charset=utf-8");
            conn.setRequestProperty("SOAPAction","\"http://tempuri.org/GetRTXSessionKey\"");
            OutputStream os=conn.getOutputStream();
            OutputStreamWriter osw=new OutputStreamWriter(os,"utf-8");
            osw.write(soap);
            osw.flush();
            osw.close();
            InputStream is=conn.getInputStream();
            return is;
        }
        catch(Exception e)
        {
            e.printStackTrace();
            return null;
        }
    }
    /*
     *用W3C DOM對返回的XML進行解釋
     *@param name String 姓名
     *@return String rtxSessionKey
     */
    public static String getRTXSessionKey(String name)
    {
        try
        {
            Document doc;
            DocumentBuilderFactory dbf=DocumentBuilderFactory.newInstance();
            dbf.setNamespaceAware(true);
            DocumentBuilder db=dbf.newDocumentBuilder();
            InputStream is=getSoapInputStream(name);
            doc=db.parse(is);
            NodeList nl=doc.getElementsByTagName("GetRTXSessionKeyResult");
            Node n=nl.item(0);
            String rtxsessionkey=n.getFirstChild().getNodeValue();
            is.close();
            return rtxsessionkey;
        }
        catch(Exception e)
        {
            e.printStackTrace();
            return null;
        }
    }
    private void jbInit() throws Exception {
    }
}
 
 rtxsoap.xml文件如下:
<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
  <soap:Body>
    <GetRTXSessionKey xmlns="http://tempuri.org/">
      <strLoginID>name</strLoginID>
    </GetRTXSessionKey>
  </soap:Body>
</soap:Envelope>
 
 
我先把webservice得wsdl文件找到
把request部分得xml粘貼下來保存在一個rtxsoap.xml得文件中并放到根目錄+\src\cn\sh\ideal\xml\文件
夾下。我是要調http://12.110.250.18/RTXMessageWebService/MessageRTX.asmx(內網(wǎng)才能用)
的一個GetRTXSessionKey方法的。根據(jù)wsdl文件中的request和response的xml文件我寫了上面的
方法。剛開始我用InputStreamReader isr=new InputStreamReader(cls.getResourceAsStream("../src/cn/sh/ideal/xml/rtxsoap.xml"))這種形式去找rtxsoap.xml文件作解析,想把參數(shù)弄進去,然后生
成個新的request的xml發(fā)給webservice來獲取響應,可就是怎么也找不到那個rtxsoap.xml(它明明就是在那里
,可就是找不到,換了很多路徑都是不對,估計問題還是處在路徑上)后來換用 FileReader isr = new FileReader("../src/cn/sh/ideal/xml/rtxsoap.xml");方法。這下能夠讀到rtxsoap.xml了。但是一到要與服務器用soap通信
的時候就報錯誤了,如下:
java.io.IOException: Server returned HTTP response code: 500 for URL: http://12.110.250.18/RTXMessageWebService/MessageRTX.asmx
 at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:791)
 at cn.sh.ideal.util.RTXWebservice.getSoapInputStream(RTXWebservice.java:83)
 at cn.sh.ideal.util.RTXWebservice.getRTXSessionKey(RTXWebservice.java:105)
 at org.apache.jsp.index_jsp._jspService(index_jsp.java:69)
 at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:137)
 at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
 at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:210)
 at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:295)
 at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:241)
 at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
 at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:247)
 at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:193)
 at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:256)
 at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:643)
 at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480)
 at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
 at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
 at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:643)
 at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480)
 at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
 at org.apache.catalina.core.StandardContext.invoke(StandardContext.java:2422)
 at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:180)
 at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:643)
 at org.apache.catalina.valves.ErrorDispatcherValve.invoke(ErrorDispatcherValve.java:171)
 at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:641)
 at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:163)
 at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:641)
 at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480)
 at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
 at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:174)
 at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:643)
 at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480)
 at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
 at org.apache.coyote.tomcat4.CoyoteAdapter.service(CoyoteAdapter.java:199)
 at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:828)
 at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConnection(Http11Protocol.java:700)
 at org.apache.tomcat.util.net.TcpWorkerThread.runIt(PoolTcpEndpoint.java:584)
 at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:683)
 at java.lang.Thread.run(Thread.java:534)
找了好久,試了n此也沒有解決。其實jbuilder是可以用wizzard來自動的加載一個webservice的(就像.net一樣點幾下就ok了)
不過項目經(jīng)理說這樣不太好,部署的時候要對axis作配置,可能不太方便。所以還是卡在上面的問題上了。希望有高人能幫
我看看,到底是哪里除了問題。我也會繼續(xù)的研究下去,爭取早日給自己一個答案。
評論
單擊以查看前 20 項評論單擊以查看后 20 項評論
  • 查看共享空間
    更多信息
     
    賦仔仔
    終于搞定了,原來問題不是處在我這邊,而是出在寫webservice的人那邊。他們本身的webservice有問題。
    呵呵,原來看問題還是得多視角得考慮。跳出那個圈,整個廬山也就盡收眼底了...
    8月25日 6:37
本站僅提供存儲服務,所有內容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權內容,請點擊舉報。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
Tapestry3.0警告: Exception during post-request cleanup
解決struts多文件上傳出現(xiàn)的問題
異步AJAX可能引起的ResponseFacade.sendError
解決idea創(chuàng)建ssm項目找不到mybatis的mapper的xml文件問題
intellij idea中使用maven創(chuàng)建web項目
虛擬化平臺cloudstack(4)——幾個異常
更多類似文章 >>
生活服務
分享 收藏 導長圖 關注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點擊這里聯(lián)系客服!

聯(lián)系客服