精华内容
下载资源
问答
  • webservice接口调用异常两种 (1)Unexpected wrapper element {xxx}xx found. Expected {xxx}xx. 后台错误: 20:47:45.824 [http-nio-8080-exec-8] WARN o.a.c.p.PhaseInterceptorChain - [doLog,475] - ...

    webservice接口调用异常两种

    (1)Unexpected wrapper element {xxx}xx found. Expected {xxx}xx.

    后台错误:

    20:47:45.824 [http-nio-8080-exec-8] WARN  o.a.c.p.PhaseInterceptorChain - [doLog,475] - Interceptor for {http://impl.service.webservice.web.ruoyi.com/}TestOneServiceImplService#{http://service.webservice.web.ruoyi.com/}apiOne has thrown exception, unwinding now
    org.apache.cxf.interceptor.Fault: Unexpected wrapper element {http://impl.service.webservice.web.ruoyi.com}apiOne found.   Expected {http://service.webservice.web.ruoyi.com/}apiOne.
    	at org.apache.cxf.wsdl.interceptors.DocLiteralInInterceptor.handleMessage(DocLiteralInInterceptor.java:107)
    

    后台错误

    前台错误:

    <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
        <soap:Body>
            <soap:Fault>
                <faultcode>soap:Client</faultcode>
                <faultstring>Unexpected wrapper element {http://impl.service.webservice.web.ruoyi.com}apiOne found.   Expected {http://service.webservice.web.ruoyi.com/}apiOne.</faultstring>
            </soap:Fault>
        </soap:Body>
    </soap:Envelope>
    

    前台错误
    错误原因:
    webservice接口上的@Webservice注解缺失 targetNamespace 属性(一般为接口实现类包路径倒序),增加该属性后解决。如图:
    解决方式

    (2)Unmarshalling Error: 意外的元素 所需元素为<{}

    后台错误:

    Caused by: com.sun.istack.internal.SAXParseException2: 意外的元素 (uri:"http://impl.service.webservice.web.ruoyi.com", local:"data")。所需元素为<{}arg0>
    	at com.sun.xml.internal.bind.v2.runtime.unmarshaller.UnmarshallingContext.handleEvent(UnmarshallingContext.java:726)
    

    后台错误
    前台错误:

    <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
        <soap:Body>
            <soap:Fault>
                <faultcode>soap:Client</faultcode>
                <faultstring>Unmarshalling Error: 意外的元素 (uri:"http://impl.service.webservice.web.ruoyi.com", local:"data")。所需元素为&lt;{}arg0> </faultstring>
            </soap:Fault>
        </soap:Body>
    </soap:Envelope>
    

    前台错误
    错误原因:
    功能方法的注解@WebParam 缺失属性,必须包含name和targetNamespace属性,增加相关属性后解决。如图:
    解决方式
    PS:注意点!!! 如果需要显示其参数名和参数类型等信息,还需要添加其他注解及属性,完整版请查看我博文:(springboot 创建webservice服务接口:https://blog.csdn.net/yssa1125001/article/details/115679689)

    最终效果如图,可以看到相关参数被成功接收到:
    最终效果

    展开全文
  • 做了个webservice接口,测试时,本地正常,但是部署到现场后,报错如下图: 后台没有catch到任何异常。 经检查应该是后台某个类缺失或者严重错误,这种情况下直接返回错误,catch不到异常。 整包替换后,问题解决...

    做了个webservice接口,测试时,本地正常,但是部署到现场后,报错如下图:

    后台没有catch到任何异常。

    经检查应该是后台某个类缺失或者严重错误,这种情况下直接返回错误,catch不到异常。

    整包替换后,问题解决。

    展开全文
  • WebService接口的生成和调用(WebService接口

    万次阅读 多人点赞 2019-03-01 13:26:23
    一:WebService的服务端发布 1:发布web程序服务端发布 2:本地发布 二:Webservice客户端调用: 1:本地生成代码,直接调用: 2、利用dos命令生成代码,和第一种基本一致 3:利用apache的AXIS直接调用远程...

    Table of Contents

     

    一:WebService的服务端发布

                 1:发布web程序服务端发布   

                    2:本地发布

     二:Webservice客户端调用:

    1:本地生成代码,直接调用:

    2、利用dos命令生成代码,和第一种基本一致

    3:service编程实现调用

    4:利用apache的AXIS直接调用远程的web service

    5:HttpURLConnection调用方式

    6.Ajax调用方式 


    Web Service是构建互联网分布式系统的基本部件,它是一个应用程序,它向外界暴露出一个能够通过Web进行调用的API。这就是说,别人能够用编程的方法通过Web来调用这个应用程序。

    它通过标准通信协议,在互联网上以服务的方式发布有用的程序模块,目前大部分是用SOAP作为通信协议。

     它提供一份详细的接口说明书,来帮助用户构建应用程序,这个接口说明书叫WSDL(Web服务描述语言,Web Service Description Language)。

    请求报文和返回报文都是XML格式的,XML(Extensible Markup Language)即可扩展标记语言,它与HTML一样,都是SGML(Standard Generalized MarkupLanguage,标准通用标记语言)。

     

    一:WebService的服务端发布

                 1:发布web程序服务端发布   

                        创建 service 接口

                               

                        创建接口实现类,实现业务逻辑

          

                                配置 web.xml 中 中 Xfire
                                 提供对 xfire 的拦截

     

                配置 webservice  配置
                     在 class 目录下建立 META-INF 目录,如(META-INF>xfire->services.xml),在
                     services.xml 文件中进行 webservice 服务的发布.

    然后启动服务,在浏览器中输入http://ip/项目名称/services就可以看到发布的接口了

     

                    2:本地发布

    import javax.jws.WebMethod;
    import javax.jws.WebService;
    import javax.xml.ws.Endpoint;
    
    /**
    * Title: ServiceHello
    * Description: 基于jdk1.6以上的javax.jws 发布webservice接口
                    @WebService - 它是一个注解,用在类上指定将此类发布成一个ws。
                    Endpoint – 此类为端点服务类,它的方法publish用于将一个已经添加了@WebService注解
                    对象绑定到一个地址的端口上。 
    * Version:1.0.0  
    * @author panchengming
     */
    @WebService  
    public class JwsServiceHello {
    
        /** 供客户端调用方法  该方法是非静态的,会被发布
         * @param name  传入参数
         * @return String 返回结果
         * */
        public String getValue(String name){
            return "欢迎你! "+name;
        }
    
        /**
         * 方法上加@WebMentod(exclude=true)后,此方法不被发布;
         * @param name
         * @return
         */
        @WebMethod(exclude=true)  
        public String getHello(String name){
            return "你好! "+name;
        }
    
        /** 静态方法不会被发布
         * @param name
         * @return
         */
        public static String getString(String name){
            return "再见!"+name;
        }
    
    
         //通过EndPoint(端点服务)发布一个WebService
        public static void main(String[] args) {
         /*参数:1,本地的服务地址;
               2,提供服务的类;
          */
         Endpoint.publish("http://192.168.1.105:8080/Service/ServiceHello", new JwsServiceHello());
         System.out.println("发布成功!");
         //发布成功后 在浏览器输入 http://192.168.1.105:8080/Service/ServiceHello?wsdl
        }
    }
    

     二:Webservice客户端调用:

    1:本地生成代码,直接调用:

    1:新建一个class类,用于调用webservice。右键src,找到Web Service Client,并输入wsdl地址,选择下载代码的路径;

    (url: http://192.168.1.105:8080/Service/ServiceHello?wsdl

     

    2.将地址上的文件下载下来(注意和发布JDK一致); 
    3.写调用方法调用下载下来的WebService中的java类中的方法; 
    示例:

    import com.pcm.ws.jws.JwsServiceHello;
    import com.pcm.ws.jws.JwsServiceHelloService;
    
    /**
     * 
    * Title: JwsClientHello
    * Description: webService 客户端调用
    * Version:1.0.0  
    * @author panchengming
     */
    public class JwsClientHello {
    
        public static void main(String[] args) {
             //调用webservice
            JwsServiceHello hello=new JwsServiceHelloService().getJwsServiceHelloPort();
            String name=hello.getValue("panchengming");
            System.out.println(name);
        }
    }
    

    2、利用dos命令生成代码,和第一种基本一致

    A、在工作空间创建用于存放使用wsimport命令生成的客户端代码的java工程

    B、使用jdk提供的wsimport命令生成客户端代码

     

    ●  wsimport命令是jdk提供的,作用是根据使用说明书生成客户端代码,wsimport只支持SOAP1.1客户端的生成

    ●  wsimport常用参数

    -d:默认参数,用于生成.class文件
    -s:生成.java文件
    -p:指定生成java文件的包名,不指定则为WSDL说明书中namespace值得倒写

     

    C、在doc窗口进入java工程项目的src目录,执行wsimport命令

    D、在Eclipse中刷新java项目,将生成的客户端代码copy到客户端工程中

    E、创建服务视图,类名从<service>标签的name属性获取

    F、获取服务实现类,视图实例调用getProt()方法,实现类的类名从portType的name属性获取

    G、调用查询方法,方法名从portType下的operation标签的name属性获取

    package com.webservice.client;
    
    
    import com.webservice.jaxws.WeatherServiceImpl;
    
    import com.webservice.jaxws.WeatherServiceImplService;
    
    
    public class Client {
    
    
    public static void main(String[] args) {
    
    //创建视图
    
    WeatherServiceImplService wsis = new WeatherServiceImplService();
    
    //获取服务实现类
    
    WeatherServiceImpl wsi = wsis.getPort(WeatherServiceImpl.class);
    
    //调用查询方法
    
    String weather = wsi.queryWeather("北京");
    
    System.out.println(weather);
    
    }
    
    }

     

    ●   <service>    服务视图,webservice的服务结点,它包括了服务端点

    ●   <binding>     为每个服务端点定义消息格式和协议细节

    ●   <portType>   服务端点,描述 web service可被执行的操作方法,以及相关的消息,通过binding指向portType

    ●   <message>   定义一个操作(方法)的数据参数(可有多个参数)

    ●   <types>        定义 web service 使用的全部数据类型

     

    3:service编程实现调用

    注意:
    (1)该种方式可以自定义关键元素,方便以后维护,是一种标准的开发方式;
    (2)这种方式同样需要wsimport生成客户端代码,只不过仅需要将服务接口类引入即可,例如如果需要<wsdl:port name="MobileCodeWSSoap" binding="tns:MobileCodeWSSoap">端口服务,则需要将生成的MobileCodeWSSoap.class类引入;

    (1)、开发步骤

    A、wisimport生成客户端代码

    B、使用serivce类创建服务视图

    C、获取服务实现类

    D、调用查询方法

    import java.io.IOException;  
    import java.net.MalformedURLException;  
    import java.net.URL;  
      
    import javax.xml.namespace.QName;  
    import javax.xml.ws.Service;  
      
    import cn.itcast.mobile.MobileCodeWSSoap;  
      
    /** 
     *  
     *  Title: ServiceClient.java
     *  Description:Service编程实现服务端调用
     *  这种方式同样需要wsimport生成客户端代码,只不过仅需要将服务接口类引入即可,例如如果需要
     *  <wsdl:port name="MobileCodeWSSoap" binding="tns:MobileCodeWSSoap">
     *  端口服务,则需要将生成的MobileCodeWSSoap.class类引入
     */  
    public class ServiceClient {  
      
        public static void main(String[] args) throws IOException {  
            //创建WSDL地址,不是服务地址  
            URL url = new URL("http://webservice.webxml.com.cn/WebServices/MobileCodeWS.asmx?wsdl");  
            //创建服务名称  
            //1.namespaceURI - 命名空间地址 (wsdl文档中的targetNamespace)
            //2.localPart - 服务视图名  (wsdl文档中服务名称,例如<wsdl:service name="MobileCodeWS">)
            QName qname = new QName("http://WebXml.com.cn/", "MobileCodeWS");  
              
            //Service创建视图  
            //参数:  
            //1.wsdlDocumentLocation - 使用说明书地址  
            //2.serviceName - 服务名称  
            Service service = Service.create(url, qname);  
           //获取服务实现类 
            //参数解释:serviceEndpointInterface - 服务端口(wsdl文档中服务端口的name属性,例如<wsdl:port name="MobileCodeWSSoap" binding="tns:MobileCodeWSSoap">)
            MobileCodeWSSoap mobileCodeWSSoap = service.getPort(MobileCodeWSSoap.class);  
            //调用查询方法  
            String result = mobileCodeWSSoap.getMobileCodeInfo("188888888", "");  
            System.out.println(result);  
        }  
    }

    4:利用apache的AXIS直接调用远程的web service

    public static void axis() {
            Service service = new Service();
            try {
                Call call = (Call) service.createCall();
                //设置地址
                call.setTargetEndpointAddress("http://www.webxml.com.cn/WebServices/ValidateEmailWebService.asmx?wsdl");
                call.setUseSOAPAction(true);
    
                //域名加方法,//上面有写着targetNamespace="http://x.x.x/",这个就是你的命名空间值了;加方法名
                call.setSOAPActionURI("http://WebXml.com.cn/" + "ValidateEmailAddress");
    
    
                // 设置要调用哪个方法
                call.setOperationName(new QName("http://WebXml.com.cn/", "ValidateEmailAddress")); // 设置要调用哪个方法
                //设置参数名 :参数名 ,参数类型:String, 参数模式:'IN' or 'OUT'
                call.addParameter(new QName("http://WebXml.com.cn/", "theEmail"), // 设置要传递的参数
                        org.apache.axis.encoding.XMLType.XSD_STRING, javax.xml.rpc.ParameterMode.IN);
    
                call.setEncodingStyle("UTF-8");
                //返回类型
                call.setReturnType(org.apache.axis.encoding.XMLType.XSD_STRING);// (标准的类型)
    
                // 调用方法并传递参数
                String res = String.valueOf(call.invoke(new Object[]{"wangkanglu1024@163.com"}));
                System.out.println(res);
    
            } catch (Exception ex) {
                ex.printStackTrace();
            }
     public static void axis2() throws MalformedURLException, SOAPException, ServiceException, RemoteException {
            String endpoint = "http://ws.webxml.com.cn/WebServices/MobileCodeWS.asmx?wsdl";
            String res = null;
            // 查询电话号码的接口方法名
            String operationName = "getMobileCodeInfo";
            // 定义service对象
            Service service = new Service();
            // 创建一个call对象
            Call call = (Call) service.createCall();
            // 设置目标地址,即webservice路径
            call.setTargetEndpointAddress(endpoint);
            // 设置操作名称,即方法名称   targetNamespace="http://WebXml.com.cn/"
            call.setOperationName(new QName("http://WebXml.com.cn/", operationName));
            // 设置方法参数
            call.addParameter(new QName("http://WebXml.com.cn/", "mobileCode"),
                    org.apache.axis.encoding.XMLType.XSD_STRING,
                    javax.xml.rpc.ParameterMode.IN);
            call.addParameter(new QName("http://WebXml.com.cn/", "userID"),
                    org.apache.axis.encoding.XMLType.XSD_STRING,
                    javax.xml.rpc.ParameterMode.IN);
            // 设置返回值类型
            //对于返回是字符串数组的返回类型只有这两种可行
    
            //call.setReturnType(org.apache.axis.encoding.XMLType.SOAP_VECTOR);
            call.setReturnClass(java.lang.String.class);
    
            call.setUseSOAPAction(true);
            call.setSOAPActionURI("http://WebXml.com.cn/" + "getMobileCodeInfo");
    
            res = (String) call.invoke(new Object[]{"15611111111", "0"});
    
            // 如果返回类型是org.apache.axis.encoding.XMLType.SOAP_VECTOR时用下面的转型接收
            //Vector v=(Vector) call.invoke(new Object[]{cityCode,userId});
    
            System.out.println(res);
    
        }

     

    5:HttpURLConnection调用方式

    (1)、开发步骤

    A、创建服务地址

    B、打开服务地址的一个连接

    C、设置连接参数

    ●   注意

    • a、POST必须大写,如果小写会出如下异常:
    •  b、如果不设置输入输出,会报异常

    D、组织SOAP协议数据,发送给服务器

    E、接收服务端的响应

    import java.io.BufferedReader;  
    import java.io.IOException;  
    import java.io.InputStream;  
    import java.io.InputStreamReader;  
    import java.io.OutputStream;  
    import java.net.HttpURLConnection;  
    import java.net.MalformedURLException;  
    import java.net.URL;  
      
    /**
     * 
    * @ClassName: HttpURLConectionMode 
    * @Description: TODO(通过HttpURLConnection发送http请求) 
    *   sope协议,比较麻烦的是需要拼接xml格式的请求数据
    * @author
    * @date 2017年11月8日 上午9:18:24 
    *
     */
    public class HttpClient {  
      
        public static void main(String[] args) throws IOException {  
            //第一步:创建服务地址,不是WSDL地址 
            URL url = new URL("http://webservice.webxml.com.cn/WebServices/MobileCodeWS.asmx");  
            //2:打开到服务地址的一个连接  
            HttpURLConnection connection = (HttpURLConnection) url.openConnection();  
            //3:设置连接参数  
            //3.1设置发送方式:POST必须大写  
            connection.setRequestMethod("POST");  
            //3.2设置数据格式:Content-type  
            connection.setRequestProperty("content-type", "text/xml;charset=utf-8");  
            //3.3设置输入输出,新创建的connection默认是没有读写权限的,  
            connection.setDoInput(true);  
            connection.setDoOutput(true);  
      
            //4:组织SOAP协议数据,发送给服务端  
            String soapXML = getXML("1866666666");  
            OutputStream os = connection.getOutputStream();  
            os.write(soapXML.getBytes());  
              
            //5:接收服务端的响应  
            int responseCode = connection.getResponseCode();  
            if(200 == responseCode){//表示服务端响应成功  
                InputStream is = connection.getInputStream();  
                InputStreamReader isr = new InputStreamReader(is);  
                BufferedReader br = new BufferedReader(isr);  
                  
                StringBuilder sb = new StringBuilder();  
                String temp = null;  
                  
                while(null != (temp = br.readLine())){  
                    sb.append(temp);  
                }  
                  
                System.out.println(sb.toString());  
                  
                is.close();  
                isr.close();  
                br.close();  
            }  
      
            os.close();  
        }  
          
        /** 
         * <?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> 
                    <getMobileCodeInfo xmlns="http://WebXml.com.cn/"> 
                        <mobileCode>string</mobileCode> 
                        <userID>string</userID> 
                    </getMobileCodeInfo> 
                </soap:Body> 
            </soap:Envelope> 
         * @param phoneNum 
         * @return 
         */  
        public static String getXML(String phoneNum){  
            String soapXML = "<?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>"  
                +"<getMobileCodeInfo xmlns=\"http://WebXml.com.cn/\">"  
                    +"<mobileCode>"+phoneNum+"</mobileCode>"  
                  +"<userID></userID>"  
                +"</getMobileCodeInfo>"  
             +" </soap:Body>"  
            +"</soap:Envelope>";  
            return soapXML;  
        }  
    }  

    提供一个比较完善一点的工具类

    public Map<String, Object> webServiceRequestUtil(String requesturl, String soapXML) throws IOException, ZycxException {
           
            HttpURLConnection connection = null;
            OutputStream os = null;
            Map<String, Object> reslut = new HashMap<>();
    
            try {
                //1:创建服务地址
                URL url = new URL(requesturl);
                //2:打开到服务地址的一个连接
                connection = (HttpURLConnection) url.openConnection();
                //3:设置连接参数
                //3.1设置发送方式:POST必须大写
                connection.setRequestMethod("POST");
                //3.2设置数据格式:Content-type
                connection.setRequestProperty("content-type", "text/xml;charset=utf-8");
                //3.3设置输入输出,新创建的connection默认是没有读写权限的,
                connection.setDoInput(true);
                connection.setDoOutput(true);
    
                //4:组织SOAP协议数据,发送给服务端
                os = connection.getOutputStream();
                os.write(soapXML.getBytes());
            } catch (IOException e) {
                throw new myException("链接webservice出错!url为:" + requesturl + ";exception:" + e);
            }
            
            StringBuilder sb = new StringBuilder();
            InputStream is = null;
            InputStreamReader isr = null;
            BufferedReader br = null;
            try {
                String temp = null;
                //5:接收服务端的响应
                int responseCode = connection.getResponseCode();
                
                if (200 == responseCode) {//表示服务端响应成功
                    is = connection.getInputStream();
                    isr = new InputStreamReader(is);
                    br = new BufferedReader(isr);
    
                    while ((temp = br.readLine()) != null) {
                        sb.append(temp);
                    }
    
                   //这是我自己封装了一个map的返回格式,封装了headr和body
                    reslut = ReturnUtil.returnjSON(BackStatus.BACK_STATUS_OK, "success", sb.toString());
                } else {
                    is = connection.getInputStream();
                    isr = new InputStreamReader(is);
                    br = new BufferedReader(isr);
    
                    while ((temp = br.readLine()) != null) {
                        sb.append(temp);
                    }
                    reslut = ReturnUtil.returnjSON(BackStatus.BACK_STATUS_EXCEPTION + "", "请求出错,http响应为:"+responseCode, sb.toString());
                
                }
            } catch (IOException e) {
                throw new myException("返回结果解析出错" + e);
            } finally {
                if(!Objects.isNull(br)){
                    br.close();
                }
                if(!Objects.isNull(isr)){
                    isr.close();
                }
                if(!Objects.isNull(is)){
                    is.close();
                }
                if(!Objects.isNull(os)){
                    os.close();
                }
            }
    
            
            return reslut;
        }

     

    6.Ajax调用方式 

    
    <!doctype html>  
    <html lang="en">  
     <head>  
      <title>Ajax调用方式</title>  
      <script type="text/javascript">  
        function queryMobile(){  
            //创建XMLHttpRequest对象  
            var xhr = new XMLHttpRequest();  
            //打开链接  
            xhr.open("post","http://webservice.webxml.com.cn/WebServices/MobileCodeWS.asmx",true);  
            //设置content-type  
            xhr.setRequestHeader("content-type","text/xml;charset=utf-8");  
      
            //设置回调函数  
            xhr.onreadystatechange=function(){  
                //判断客户端发送成功&&服务端响应成功  
                if(4 == xhr.readyState && 200 == xhr.status){  
                    alert(xhr.responseText);  
                }  
            }  
      
            //组织SOAP协议数据  
            var soapXML = "<?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>"  
                +"<getMobileCodeInfo xmlns=\"http://WebXml.com.cn/\">"  
                    +"<mobileCode>"+document.getElementById("phoneNum").value+"</mobileCode>"  
                  +"<userID></userID>"  
                +"</getMobileCodeInfo>"  
             +" </soap:Body>"  
            +"</soap:Envelope>";  
            alert(soapXML);  
      
            //发送请求  
            xhr.send(soapXML);  
        }  
      </script>  
     </head>  
     <body>  
        手机号归属地查询:<input type="text" id="phoneNum" /><input type="button" value="查询" onclick="javascript:queryMobile();"/>  
     </body>  
    </html>

    参考文章:https://blog.csdn.net/qq_35124535/article/details/62226585#t2 

    整理至此,希望对大家有帮助

     

    展开全文
  • 在调用第三方提供的webservice接口时我们可以设置超时时间: HTTPClientPolicy client = new HTTPClientPolicy(); client.setReceiveTimeout(1000 * 10); // 该时间为响应超时。 client.setConnectionTimeout(1000 *...

    在调用第三方提供的webservice接口时我们可以设置超时时间:
    HTTPClientPolicy client = new HTTPClientPolicy();
    client.setReceiveTimeout(1000 * 10); // 该时间为响应超时。
    client.setConnectionTimeout(1000 * 20 ); // 连接超时。
    超时后异常:
    请求超时 java.net.SocketTimeoutException: connect timed out
    响应超时 java.net.SocketTimeoutException: Read timed out
    org.apache.cxf.interceptor.Fault: Could not send Message.
    at org.apache.cxf.interceptor.MessageSenderInterceptorMessageSenderEndingInterceptor.handleMessage(MessageSenderInterceptor.java:64)atorg.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:243)atorg.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:487)atorg.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:313)atorg.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:265)atorg.apache.cxf.frontend.ClientProxy.invokeSync(ClientProxy.java:73)atorg.apache.cxf.frontend.ClientProxy.invoke(ClientProxy.java:68)atcom.sun.proxy.MessageSenderEndingInterceptor.handleMessage(MessageSenderInterceptor.java:64) at org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:243) at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:487) at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:313) at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:265) at org.apache.cxf.frontend.ClientProxy.invokeSync(ClientProxy.java:73) at org.apache.cxf.frontend.ClientProxy.invoke(ClientProxy.java:68) at com.sun.proxy.Proxy32.bizECQuery(Unknown Source)
    at com.sinosoft.test.Test.main(Test.java:400)
    Caused by: java.net.SocketTimeoutException: SocketTimeoutException invoking http://localhost:8080/services/IBizECQuery?wsdl: Read timed out
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
    at org.apache.cxf.transport.http.HTTPConduitWrappedOutputStream.mapException(HTTPConduit.java:2058)atorg.apache.cxf.transport.http.HTTPConduitWrappedOutputStream.mapException(HTTPConduit.java:2058) at org.apache.cxf.transport.http.HTTPConduitWrappedOutputStream.close(HTTPConduit.java:2043)
    at org.apache.cxf.transport.AbstractConduit.close(AbstractConduit.java:66)
    at org.apache.cxf.transport.http.HTTPConduit.close(HTTPConduit.java:639)
    at org.apache.cxf.interceptor.MessageSenderInterceptorMessageSenderEndingInterceptor.handleMessage(MessageSenderInterceptor.java:62)...8moreCausedby:java.net.SocketTimeoutException:Readtimedoutatjava.net.SocketInputStream.socketRead0(NativeMethod)atjava.net.SocketInputStream.socketRead(SocketInputStream.java:116)atjava.net.SocketInputStream.read(SocketInputStream.java:171)atjava.net.SocketInputStream.read(SocketInputStream.java:141)atjava.io.BufferedInputStream.fill(BufferedInputStream.java:246)atjava.io.BufferedInputStream.read1(BufferedInputStream.java:286)atjava.io.BufferedInputStream.read(BufferedInputStream.java:345)atsun.net.www.http.HttpClient.parseHTTPHeader(HttpClient.java:704)atsun.net.www.http.HttpClient.parseHTTP(HttpClient.java:647)atsun.net.www.protocol.http.HttpURLConnection.getInputStream0(HttpURLConnection.java:1569)atsun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1474)atjava.net.HttpURLConnection.getResponseCode(HttpURLConnection.java:480)atorg.apache.cxf.transport.http.HTTPConduitMessageSenderEndingInterceptor.handleMessage(MessageSenderInterceptor.java:62) ... 8 more Caused by: java.net.SocketTimeoutException: Read timed out at java.net.SocketInputStream.socketRead0(Native Method) at java.net.SocketInputStream.socketRead(SocketInputStream.java:116) at java.net.SocketInputStream.read(SocketInputStream.java:171) at java.net.SocketInputStream.read(SocketInputStream.java:141) at java.io.BufferedInputStream.fill(BufferedInputStream.java:246) at java.io.BufferedInputStream.read1(BufferedInputStream.java:286) at java.io.BufferedInputStream.read(BufferedInputStream.java:345) at sun.net.www.http.HttpClient.parseHTTPHeader(HttpClient.java:704) at sun.net.www.http.HttpClient.parseHTTP(HttpClient.java:647) at sun.net.www.protocol.http.HttpURLConnection.getInputStream0(HttpURLConnection.java:1569) at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1474) at java.net.HttpURLConnection.getResponseCode(HttpURLConnection.java:480) at org.apache.cxf.transport.http.HTTPConduitWrappedOutputStream.handleResponseInternal(HTTPConduit.java:2165)
    at org.apache.cxf.transport.http.HTTPConduitWrappedOutputStream.handleResponse(HTTPConduit.java:2134)atorg.apache.cxf.transport.http.HTTPConduitWrappedOutputStream.handleResponse(HTTPConduit.java:2134) at org.apache.cxf.transport.http.HTTPConduitWrappedOutputStream.close(HTTPConduit.java:1988)
    … 11 more

    处理超时的时候我们想捕获java.net.SocketTimeoutException异常是捕获不到的,但是有时又需要根据超时返回响应的结果。
    经过认真思考终于发现了解决办法:
    catch (Exception e) {
    e.printStackTrace();
    Throwable cause = e.getCause();
    if (cause.getMessage().indexOf(“Connection refused: connect”) > 0){
    System.out.println(“连接异常”);
    }else if (cause.getMessage().indexOf(“Read timed out”) > 0){
    System.out.println(“响应超时”);
    }else if (cause.getMessage().indexOf(“connect timed out”) > 0){
    System.out.println(“连接超时”);
    }else{
    System.out.println(“处理异常”);
    }
    }

    连接异常:地址连接不可用,可能是服务端没有启动。

    展开全文
  • 1、如何请求WebService短信接口? 最快速还不会出很大技术问题的方式:就是根据接口文档中提供wsdl链接,进入到链接,将链接页面以wsdl保存到本地,然后在项目中生成客户端代码。 2、这样的好处:可以直接创建对象...
  • 调用webservice 接口一般有以下几种方法: 一。 使用gsoap 工具生成客户端代理调用代码。 其中会用到 wdsl2h 和 soapcpp2 工具, 此种办法在c++ 工程中常见。 二。 使用python 提供的suds 库调用接口。 from suds....
  • Python3使用suds-jurko库来发送webservice接口请求 导入请求webservice接口需要用到的包 pip install suds-jurko 第一步:导入所需要的包 from suds.client import Client, WebFault 第二步:创建webservice对象,来...
  • 最近写用Axis2写WebService客户端,在Windows环境下运行正常,在Linux环境下包如下异常: Caused by: java.lang.NullPointerException  at org.apache.axiom.locator.DefaultOMMetaFactoryLocator....
  • webservice接口与restful接口

    千次阅读 2019-09-26 09:45:34
    webservice接口与restful接口的区别: ...java调用webservice时抛出该异常:Fault occurred while processing:看了网上一堆解答,我的请求参数没问题,eclipse有报错,看报错信息就可以找到问题了。 2...
  • MUi 框架ajax请求WebService接口

    千次阅读 2016-10-15 15:10:32
    mui.init(); mui.plusReady... //异常处理; mui.alert(type); console.log(type); } }); }); }); 注意:如果返回的格式有问题会提示:abort
  • 先说明一下当时情况,厂家发布了一个webservice服务,我生成客户端,然后服务已经拿到,但是调用方法是出现如上错误 一开始百度搜了许久,收到的答案较为复杂,而且不是满意,后面仔细查看了一下对方的服务,看出了...
  • java 调用webService接口

    2018-07-18 16:06:20
    由于项目中使用webService接口,因此学习了下如何调用webService接口。 一、使用httpClient调用webService接口:  public static String executeWebService(String urls,String soapXml) throws IOException {  ...
  • 如果是从远程请求回来的内容: 那么你把返回的流New为字符串,是看不到BOM的,但是你必须截取你需要的内容: if(null != result && !"".equals(result)){ if(result.indexOf(") != -1 && result.lastIndexOf...
  • webservice接口开发

    千次阅读 2016-12-24 13:30:54
    webservice接口开发  对于webservice接口的开发,本次使用的是maven+Spring+CXF 。 1、在maven工程中添加 Dynamic Web Module 。具体可参见:http://blog.csdn.net/chuyuqing/article/details/28879477 这篇文章...
  • webService接口调用

    2019-10-16 16:26:32
    调用webService接口: /* * WebServiceUtil * * 2015年11月6日 * * (C) Copyright 2015 Suzhou USTC Sinovate Information Technology Co., Ltd. (http://www.ustcinfo.com/index.shtml). * * All rights ...
  • } } catch (Exception e) { log.error("调用远程WebService接口异常:{}" , e); throw e; }finally { IOUtils.closeQuietly(closeableHttpClient); } return result; } /** * xml转换为JSONObject * @Author nicky ...
  • java SSM 开发webservice接口

    千次阅读 2018-07-18 15:54:38
    因此在网上简单的学习了一下如果用java开发并发布webservice接口。 简单的webservice接口示例: @WebService public class JwsServiceHello {  /**  * 非静态方法,改方法会被发布出去  ...
  • webservice接口地址:需要注意的是接口地址返回的是一个xml文件。既可以用来承载数据,也可以直接作为文档。 想要直观查看接口文档,可以去掉"?wsdl",就可以直观看到有哪些接口。以及参数信息 url = ...
  • 对端提供了的webservice接口,需要我们拼接xml数据,简直不要太坑了,不能发送一次请求,返回多个虚拟子账户的信息。每个子账户都要拼接一个xml,循环调用对端的接口。返回的xml数据经过解析,入库到我们的表中 1....
  • 上篇博客webservice接口三连击之second我们讲解了如何用soap ui 工具解析webservice接口,今天我们将介绍用java实现webservice接口的调用。 1.首先写了一个http的工具类,用来发送符合http协议的请求,代码如下: ...
  • Frame--webservice接口

    2019-05-07 23:14:26
    使用2.1 安装库2.2 查看接口方式2.3 查看请求返回4. 封装类 1. 简介 webservice的基础组成是http+xml,是HTTP的一个专用版本,遵循一种特殊的xml消息格式 2. 使用 2.1 安装库 pip install suds-jurko 2.2 查看...
  • Webservice接口通用实现

    2014-09-19 11:31:51
    看到许多中小项目的webservice接口的源代码,不禁有个吐槽的冲动。除了会用CXF,Axis2等神级框架,其他的懒得动了,都是Ctrl+V,Ctrl+C,把其他模块的Request,Response贴过来。一旦增加某个特性,不得不在所有...
  • 这个一看我以为是正常的webService风格的接口,一般的webService接口不都是http格式请求,可是今天的这个不是,这是要做一个API请求,我一听API请求,为什么不传json,要传xml??? 最后才知道客户,...
  • ajax访问webservice接口

    2017-08-16 09:37:58
    1.使用mui框架的ajax请求mui.ajax('http://192.168.100.93:8080/oaWebService/standardService/app/getAuditMsg', { //webservice接口中方法需要的参数 data: {
  • EJBCA开发 webService接口调用

    千次阅读 2014-05-29 19:45:33
    EJBCA集成 webService接口的调用,及常用的接口调用示例
  • 本文结合实际案例对使用WebService时,由于高并发产生的异常进行分析和概述,并在此基础上提出了相应的解决方案。
  • 二、 常用接口采用方式:1、webService接口:是走soap协议通过http传输,请求报文和返回报文都是xml格式的,我们在测试的时候都用通过工具才能进行调用,测试。可以使用的工具有apipost、jmeter、load...
  • 手机短信验证码的功能,其中最主要的是用到了第三方提供的短信平台接口WebService客户端接口 一:首先上几张案例截图,以便大家可以了解一下短信验证码的流程,这里我在做的过程中也参考了很多网站的短信验证码,...
  • 使用 Axis2 调用 Java WebService 接口

    千次阅读 2018-05-18 15:46:30
    使用 Axis2 调用 Java WebService 接口

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 12,525
精华内容 5,010
关键字:

webservice接口请求异常