先说下现在我这里的实现过程:
    我使用axis2发布一个服务,服务实现过程中,要调用一段C程序写的代码,我用JNI调用。然后不通过服务发布,直接在main中测试,可以通过。当把服务用tomcat服务,再写客户端调用的时候,就出错了。。错误如下:
Exception in thread "main" org.apache.axis2.AxisFault: Could not initialize class TestCallC.HelloWorld
at org.apache.axis2.util.Utils.getInboundFaultFromMessageContext(Utils.java:435)
at org.apache.axis2.description.OutInAxisOperationClient.handleResponse(OutInAxisOperation.java:371)
at org.apache.axis2.description.OutInAxisOperationClient.send(OutInAxisOperation.java:417)
at org.apache.axis2.description.OutInAxisOperationClient.executeImpl(OutInAxisOperation.java:229)
at org.apache.axis2.client.OperationClient.execute(OperationClient.java:165)
at org.apache.axis2.client.ServiceClient.sendReceive(ServiceClient.java:540)
at org.apache.axis2.client.ServiceClient.sendReceive(ServiceClient.java:521)
at org.apache.axis2.rpc.client.RPCServiceClient.invokeBlocking(RPCServiceClient.java:102)
at WsClientNoStub.WsClient.invokeOp(WsClient.java:32)
at WsClientNoStub.WsClient.main(WsClient.java:85)其中TestCallC 是包名,HelloWorld是调用c程序的类。
现在我有两个问题:
1、如上问题,应该如何解决。。
2、我调用c编写的dll,一般情况下我是放到项目根目录那里的,但是这里服务是以aar形式发布的,dll也打包到aar中了,可是不能调用成功,我只有把dll放到tomcat的bin目录下才可以调用,然后出现上面所示错误?为什么?我应该把dll文件放置到什么地方呢?

解决方案 »

  1.   

    打aar包的时候把dll的包名都一并包含进去。也就是aar中的目录结构要与你程序中的统一起来这样调用的时候才能找到。但是要注意,目录结构的参照是你的service.class的包为准.
      

  2.   


    是把dll打到aar包的根目录下面吗?我就是这样做的啊,可是还是出现问题,说找不到,如下,我的dll文件名是TestCHelloWorld.dll:
    Exception in thread "main" org.apache.axis2.AxisFault: no TestCHelloWorld in java.library.path
    at org.apache.axis2.util.Utils.getInboundFaultFromMessageContext(Utils.java:435)
    at org.apache.axis2.description.OutInAxisOperationClient.handleResponse(OutInAxisOperation.java:371)
    at org.apache.axis2.description.OutInAxisOperationClient.send(OutInAxisOperation.java:417)
    at org.apache.axis2.description.OutInAxisOperationClient.executeImpl(OutInAxisOperation.java:229)
    at org.apache.axis2.client.OperationClient.execute(OperationClient.java:165)
    at org.apache.axis2.client.ServiceClient.sendReceive(ServiceClient.java:540)
    at org.apache.axis2.client.ServiceClient.sendReceive(ServiceClient.java:521)
    at org.apache.axis2.rpc.client.RPCServiceClient.invokeBlocking(RPCServiceClient.java:102)
    at WsClientNoStub.WsClient.invokeOp(WsClient.java:32)
    at WsClientNoStub.WsClient.main(WsClient.java:103)
    是不是还需要配置路径之类的?
      

  3.   

    发现当把dll放于tomcat的bin目录下,并重启tomcat后就可以运行成功啦但是怎么才能使dll只是放于aar包中就可以运行呢?是不是需要配置路径之类的?
      

  4.   

    请问Axis2/C+tomcat试过没,有谁用过啊,请指教。