通过HTTPS连接使用Web服务

时间:2015-02-19 10:13:26

标签: java web-services cxf

我正在尝试使用Apache CXF在Java中构建Web服务使用者。我已设法使用 WSDLToJava 工具生成所需的类。在那之后,我通过HTTP使用本地Web服务做了一些测试请求,他们工作了。

由于一切都井然有序,我为远程Web服务端点生成了类,该端点使用HTTPS进行通信。在使用服务时,我需要创建一个生成的Service类的新实例,还需要一个端口(可用的Web方法的代理)。

以下是这两个课程的两个问题:

  1. 服务类总是需要20秒来实例化本地Web服务没有发生的事情
  2. 尝试从服务中检索端口(代理)类时,它不会超时,但会挂起,而处理器使用率为70%,最终JVM内存不足。
  3. 以下是我所谈到的两行代码。我甚至使用该实用程序生成测试类,结果是一样的。

    TestService ss = new TestService(wsdlURL, SERVICE_NAME); TestSoap port = ss.getTestSoap();

    您是否有任何想法出现此行为?

1 个答案:

答案 0 :(得分:0)

我设法解决了这个问题。我会告诉你,因为也许有人可能觉得这很有用。

我做了一些测试,似乎经过一段时间后,测试方法开始挂起java.lang.ClassLoader.defineClass1()

问题的出现是因为我正在运行一个Ant目标,它使用WSDL2Java生成类,JAVA_HOME变量指向Java 8.测试是在使用Java 7的IDEA中进行的。我现在将IDEA转换为使用Java 8 ant正确。

经过进一步调查后,我发现了真正的问题。在加载代理类时,PermGen正在填充许多类(~7.5k)。由于Java 8没有任何PermGen,因此不会出现问题。我添加了JVM标志-XX:PermSize-XX:MaxPermSize,并为Java 7增加了它的大小。