在webservice里调用耗时方法出错的解决方案

webservice调用耗时方法出错

在webservice里调用多个耗时的方法时,如果按顺序执行,下面的方法要等上面的方法执行完毕才能执行,如果这些方法比较耗时,并且包括回调等异步调用,就回出现下面的方法不能正确执行,

实例代码如下:

public String runMethod(String syncId) {
  try {
   //处理Datapull
   dataPullService.setSyncId(syncId);
   //设置数据库参数
   dataPullService.setJdbcUrl(Config.getStringValue("jdbc.jdbcUrl"));
   dataPullService.setUser(configurer.decrypt(Config.getStringValue("jdbc.user"), "1202000200021234"));
   dataPullService.setPassword(configurer.decrypt(Config.getStringValue("jdbc.password"), "1202000200021234"));
   dataPullService.setTypeid(1);
   dataPullService.run();
   //处理ofd转换
   ofdService.setSyncId(syncId);
   ofdService.setServerUrl(Config.getStringValue("serverUrl"));
   ofdService.run();
   //判断OFD文件是否转换完成
   while(true) {
    if(serviceManager.isHasOFD(syncId)) {
     break;
    }
   }
   //处理pdf转换
   pdfService.setSyncId(syncId);
   pdfService.setServerUrl(Config.getStringValue("serverUrl"));
   pdfService.run();
  }catch(Exception e) {
   return "error "+syncId;
  }
  return "success "+syncId;
 }

在上面的方法里,处理ofd的代码执行完毕会在某个表里插入一条数据,这个操作耗时,并且是异步的,会出现还没有插入成功,下面的pdf执行代码查询不到记录导致调用pdf部分失败。

解决方案是:

一直去查询那张表,如果有记录则调用pdf部分代码,使用死循环解决。

在调用webservice时常见的几种异常原因

今天由于公司业务,需要调用webservice服务,一开始一直报错,在网上搜集一些资料后,先整理如下:

问题1:

Java.lang.NoClassDefFoundError: javax/xml/soap/SOAPException,原因是没有导入 axis2-saaj.jar包

问题2:

java.lang.NoClassDefFoundError: org/apache/commons/discovery/tools/DiscoverSingleton,原因是没有 导入commons-discovery.jar包

问题3:

org.apache.commons.logging.LogFactory,原因是没有导入commons-logging.jar包

问题4:

java.lang.NoClassDefFoundError: javax/xml/rpc/Service,原因是没有导入jaxrpc.jar包(可以到axis官网下载对应版本的axis,在其中的lib目录可以找到);如果使用的是maven,可以导入org.apache.axis下的axis-jaxrpc-1.4.jar。

以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • Java调用CXF WebService接口的两种方式实例

    通过http://localhost:7002/card/services/HelloWorld?wsdl访问到xml如下,说明接口写对了. 1.静态调用 // 创建WebService客户端代理工厂 JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean(); // 判断是否抛出异常 factory.getOutInterceptors().add(new LoggingInInterceptor()); // 注册webservic

  • Java解析调用webservice服务的返回XML串详解

    本文由Markdown语法编辑器编辑完成. 1. 需求分析: 已知当在调用某一webservice的服务时,如果调用成功,会接受到该服务的返回XML串.后端在获取了该XML原始串时,需要进行解析,将其解析为JSON格式,以便于发送到前台,供前台页面显示和交互. 2. 解决方案: 该XML的原始形式为: <?xml version="1.0" encoding="UTF-8" ?> <SOAP-ENV:Envelope xmlns:SOAP-ENV=

  • Java 使用Axis调用WebService的示例代码

    import org.apache.axis.client.Call; import org.apache.axis.client.Service; /** * @ClassName: TestAxis * @Description: TODO(描述这个类的作用) * @author huc * */ public class TestAxis { public static void main(String []args){ String inConditions = "<?xml ve

  • Java调用WebService接口作测试

    1.选择一个WebService接口作测试 假设 WebService url 为 http://ws.webxml.com.cn/WebServices/MobileCodeWS.asmx(查询手机归属地) 通过网页看到接口有两个,也可看到参数以及返回值 该接口来源于 http://www.webxml.com.cn/zh_cn/web_services.aspx (WebService接口大全) 选择该手机号查询归属地,是由于简单,其他接口都复杂一点,老是出现解析组件 's:schema'

  • IDEA中WebService生成Java代码并调用外部接口实现代码

    最近一个Spring项目中需要调用其他第三方系统的接口对接数据,对方只给了一个wsdl地址,我们需要根据给的wsdl地址,自己来生成里边的接口等调用接口所需要的类,来调用接口实现数据获取,进行自己的业务处理. 通过wsdl文件生成java代码 我们根据wsdl地址生成所需接口的代码,方式很多.可以用jdk自带的wsimport,我是用的idea开发工具生成的. 根据对方提供的地址,在浏览器中输入能调用得到xml格式文件,证明对方服务开启并能访问,然后右键网页保存xml文件,修改后缀名为wsdl.

  • springboot整合cxf发布webservice以及调用的方法

    webservice性能不高,但是现在好多公司还是在用,恰好今天在开发的时候对接项目组需要使用到webservice下面来说下简单的案例应用 首先老规矩:引入jar包 <dependency> <groupId>org.apache.cxf</groupId> <artifactId>cxf-spring-boot-starter-jaxws</artifactId> <version>3.1.11</version> &

  • JAVA调用SAP WEBSERVICE服务实现流程图解

    调用SAP WebService服务需要转换操作 1.通过浏览器访问SAP WebService地址,进行验证并生成wsdl文件地址并不是可以直接转化的wsdl: 直接访问地址并进行验证后: 另存文件wsdl 2. 通过Idea生成java可执行代码存放wsdl 选中 wsdl文件,选择Tools ->WebService -> Generate Java Code From Wsdl- 最开始引用路径会是一个绝对路径,我们修改Service引用wsdl方式 3. 调用service 此时便可

  • 在webservice里调用耗时方法出错的解决方案

    webservice调用耗时方法出错 在webservice里调用多个耗时的方法时,如果按顺序执行,下面的方法要等上面的方法执行完毕才能执行,如果这些方法比较耗时,并且包括回调等异步调用,就回出现下面的方法不能正确执行, 实例代码如下: public String runMethod(String syncId) { try { //处理Datapull dataPullService.setSyncId(syncId); //设置数据库参数 dataPullService.setJdbcUrl

  • Spring Boot右键maven build成功但是直接运行main方法出错的解决方案

    1.代码就一个Controller,从官网复制过来的,如下 package com.springboot.controller; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.EnableAutoConfiguration; import org.springframework.stereotype.Controller; import org.sp

  • ThinkPHP里用U方法调用js文件实例

    本文实例讲述了ThinkPHP里用U方法调用js文件的方法.分享给大家供大家参考.具体如下: 在TP里提供了在模板文件中直接调用函数的快捷方法.U是其中之一.手册里有它的用法: 复制代码 代码如下: {:U('User/insert' )} 先把js文件的后缀改成html(这个不会影响),然后写个JsAction,在里面进行调用: <?php class JsAction extends Action{ function nav() { $this->display('Index:js:nav

  • sql server定时作业调用Kettle job出错的快速解决方法

    错误信息: Unable to list jar files in plugin folder 'C:\Windows\system32\config\systemprofile\.kettle\plugins' Unable to get VFS File object for filename 'C:\Windows\system32\config\systemprofile\.kettle\plugins' : Could not find file with URI "C:\Window

  • 解决Vue watch里调用方法的坑

    这里是说watch调用methods里方法的时候,页面经常会报找不到方法 这个时候一定要在watch里去输出一下this, 看看this包裹的壳是不是多了好多层,所以找不到方法,虽然我到现在还没理解为啥有时候会出现一层或几层壳的问题. 例如 正常情况下用this.functionname()就可以调用了. 但是在一些情况下(现在本人还没找到原因)在控制台输出this的时候你会发现数据经常是这样包裹的a{name},name里面对你的methods还包裹了一层,所以使用方法的时候就会变成 this

  • 获取WebService的请求信息方法实例

    一个已经写好的项目中有多个WebService,由于之前没有记录请求信息的,有时候需要查错等需要找到当次的请求信息,所以需要加入记录请求信息的功能. 首先想到的是在每一个带有WebMethod特性的方法里调用记录请求信息的方法,这样可以记录信息,但是太多带WebMethod特性的方法了,于是想在全局中拦截并捕获,于是想到了Global.asax public class Global : System.Web.HttpApplication { protected void Applicatio

  • JS中精巧的自动柯里化实现方法

    以下内容通过代码讲解和实例分析了JS中精巧的自动柯里化实现方法,并分析了柯里化函数的基础用法和知识,学习一下吧. 什么是柯里化? 在计算机科学中,柯里化(Currying)是把接受多个参数的函数变换成接受一个单一参数(最初函数的第一个参数)的函数,并且返回接受余下的参数且返回结果的新函数的技术.这个技术由 Christopher Strachey 以逻辑学家 Haskell Curry 命名的,尽管它是 Moses Schnfinkel 和 Gottlob Frege 发明的. 理论看着头大?没

  • android webview中使用Java调用JavaScript方法并获取返回值

    在android平板上用webview打开一个网页,调用里面的javascript方法,同时相互传参. 网上例子很少啊,基本都不能获取返回值,贴一个自己最后调试完的代码如下: Java: 复制代码 代码如下: protected void onCreate(Bundle savedInstanceState) { ........ x = (WebView)this.findViewById(R.id.webView_viewTable); x.setScrollBarStyle(View.SC

  • Java多线程实现异步调用的方法

    在JAVA平台,实现异步调用的角色有如下三个角色:调用者 提货单   真实数据 一个调用者在调用耗时操作,不能立即返回数据时,先返回一个提货单.然后在过一断时间后凭提货单来获取真正的数据. 去蛋糕店买蛋糕,不需要等蛋糕做出来(假设现做要很长时间),只需要领个提货单就可以了(去干别的事情),等到蛋糕做好了,再拿提货单取蛋糕就可以了. public class Main { public static void main(String[] args) { System.out.println("ma

随机推荐