我正在尝试使用Apache CXF在Java中构建Web服务使用者。我已设法使用 WSDLToJava 工具生成所需的类。在那之后,我通过HTTP使用本地Web服务做了一些测试请求,他们工作了。
由于一切都井然有序,我为远程Web服务端点生成了类,该端点使用HTTPS进行通信。在使用服务时,我需要创建一个生成的Service类的新实例,还需要一个端口(可用的Web方法的代理)。
以下是这两个课程的两个问题:
以下是我所谈到的两行代码。我甚至使用该实用程序生成测试类,结果是一样的。
TestService ss = new TestService(wsdlURL, SERVICE_NAME);
TestSoap port = ss.getTestSoap();
您是否有任何想法出现此行为?
答案 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增加了它的大小。