解决方案 »

  1.   

    AxisFault
     faultCode: {http://xml.apache.org/axis/}HTTP
     faultSubcode:
     faultString: (0)null
     faultActor:
     faultNode:
     faultDetail:
            {}:return code:  0        {http://xml.apache.org/axis/}HttpErrorCode:0(0)null
            at org.apache.axis.transport.http.HTTPSender.readFromSocket(HTTPSender.j
    ava:744)
            at org.apache.axis.transport.http.HTTPSender.invoke(HTTPSender.java:144)        at org.apache.axis.strategies.InvocationStrategy.visit(InvocationStrateg
    y.java:32)
            at org.apache.axis.SimpleChain.doVisiting(SimpleChain.java:118)
            at org.apache.axis.SimpleChain.invoke(SimpleChain.java:83)
            at org.apache.axis.client.AxisClient.invoke(AxisClient.java:165)
            at org.apache.axis.client.Call.invokeEngine(Call.java:2784)
            at org.apache.axis.client.Call.invoke(Call.java:2767)
            at org.apache.axis.client.Call.invoke(Call.java:2443)
            at org.apache.axis.client.Call.invoke(Call.java:2366)
            at org.apache.axis.client.Call.invoke(Call.java:1812)
            at com.dic.diass.util.WsdlUtil.callWebService(WsdlUtil.java:277)
            at com.dic.diass.dao.GTbwfsjJGThread.run(GTbwfsjJGThread.java:61)
      

  2.   

    给位帮看一下,早上的时候这webservice还能调用,刚刚启动项目的时候,就报这个错误了
    该怎么解决呢
      

  3.   

    你只有一个线程在后台做这件事,因此,你在发送的时候把集合复制一份。
    List  原来的 ...;List 准备发送的 = new ArrayList(原来的);Sender s ...;
    s.send(准备发送的);原来的.removeAll(准备发送的) ; // 把已经发送的所有对象从原来的集合中删除掉。
    注意如果你是一个线程准备数据,另一个线程发送,你就需要在修改这个集合时使用同步锁。如果你是单一线程发送,那你发送完了清空集合,另外你从数据库中发现发送了75次那表示你发送成功后会记录它已经发送了?那下次取的时候不要再选它了。
    readFromSocket 这个表示对方出错了,可能是你给的数据有问题,也可能是对方自己出了其它问题,所以你先确认一下数据没有问题。
      

  4.   


    我现在是一个线程在工作的,用的是queue集合,您说的方法是在我调用对方的接口方法后就执行removeall?把集合内的数据都清空掉?我这个线程是一直在扫描数据库的。
    还有就是readFromSocket 这个错误是参数问题还是接口出现了问题?我原来写了个测试方法,是可以通过的、但是现在执行那个测试方法的时候也报上面的错误了、
      

  5.   


    我刚刚用queue集合和map集合都试过了,而且数据库也有一个字段是表示发送成功的数据、每次只取一百条的话在一百条之内有2条重复的,但是到了200-300条的时候重复数据会+1变成3了、这个怎么搞呢
      

  6.   


    集合我用的是queue集合
    这个怎么判断呢?我用的是jdbc,是在while(rs.next){是在这用if判断吗cache.queue.offer(对象)}?
      

  7.   


    但是也还是有重复数据的、昨天我测试过,在我程序运行的没多久的时候,我改了数据库的标志位。
    每次取100条,到200条的时候有3条重复的,到300条的时候有4条是重复的、1、要么是你用多个线程在发送,而多个线程获取数据的时候没有很好的用事务控制
    2、你的sql语句错误
    3、程序本身逻辑就错了通过你描述的情况已经无法为你诊断,其实这个问题真的很简单,只要你每次获取数据的时候,将数据设置成正在发送状态(这两步需要通过事务控制,而且一开始获取数据的时候必须要使用for update加锁),发送成功了之后更新为发送成功状态。可以考虑增加一个设置,处于正在发送状态的信息如果超过一个设置时间,则视为发送失败。
      

  8.   


    但是也还是有重复数据的、昨天我测试过,在我程序运行的没多久的时候,我改了数据库的标志位。
    每次取100条,到200条的时候有3条重复的,到300条的时候有4条是重复的、1、要么是你用多个线程在发送,而多个线程获取数据的时候没有很好的用事务控制
    2、你的sql语句错误
    3、程序本身逻辑就错了通过你描述的情况已经无法为你诊断,其实这个问题真的很简单,只要你每次获取数据的时候,将数据设置成正在发送状态(这两步需要通过事务控制,而且一开始获取数据的时候必须要使用for update加锁),发送成功了之后更新为发送成功状态。可以考虑增加一个设置,处于正在发送状态的信息如果超过一个设置时间,则视为发送失败。可以确定的是sql语句没有错,我是在用线程发送数据,而查询的方法我是写在一个while循环里面的,让它一直查询数据库,但是这样子有很多的重复数据往集合里放