Java apache cxf客户端的初始化速度慢

Java apache cxf客户端的初始化速度慢,java,apache,soap,cxf,Java,Apache,Soap,Cxf,我正在使用wsdl2java生成的类和以下代码: MyService f = new MyService(); MyServicePortType type = f.getMyServicePortType(); 每一个呼叫都需要30秒的时间。为什么会这样?经过数小时的搜索和修补,问题在于如何引用方案文件: 尽管WSDL和XSD是本地存储的,但仍有一些引用到w3.org,如下所示: <!DOCTYPE schema PUBLIC "-//W3C//DTD XMLSchema 200102

我正在使用wsdl2java生成的类和以下代码:

MyService f = new MyService();
MyServicePortType type = f.getMyServicePortType();

每一个呼叫都需要30秒的时间。为什么会这样?

经过数小时的搜索和修补,问题在于如何引用方案文件: 尽管WSDL和XSD是本地存储的,但仍有一些引用到w3.org,如下所示:

<!DOCTYPE schema PUBLIC "-//W3C//DTD XMLSchema 200102//EN" "http://www.w3.org/2001/XMLSchema.dtd" [...

<import namespace="http://www.w3.org/2000/09/xmldsig#" schemaLocation="http://www.w3.org/TR/2002/REC-xmldsig-core-20020212/xmldsig-core-schema.xsd" />

我欠你一大笔债,因为我已经为此挣扎了好几天,你的回答为我指明了正确的方向

实际上,w3.org URL需要很长时间才能响应,但是实际上没有理由认为从WSDL生成的SOAP客户端仍然需要在运行时解析WSDL

事实上,它并不,但是默认生成的构造函数强制这样做

我发现,通过以不同的方式实例化服务端口并通过请求上下文指定服务端点,可以跳过此步骤,如下所示:

//以这种方式创建服务会将null作为wsdlLocation传递,从而阻止运行时解析和解析wsdl
服务服务=ZefixService.create(ZefixService.Service);
ZefixServicePortType zefixServicePort=service.getPort(ZefixServicePortType.class);
Map requestContext=((BindingProvider)zefixServicePort.getRequestContext();
//因为我们创建的服务没有wsdl位置,所以我们需要自己指定服务基url
put(BindingProvider.ENDPOINT_ADDRESS_属性,Configuration.get(Constants.API_BASE_URI_属性));
requestContext.put(BindingProvider.USERNAME_属性,Configuration.get(Constants.USER_属性));
requestContext.put(BindingProvider.PASSWORD_属性,Configuration.get(Constants.PASSWORD_属性));
返回zefixServicePort;
我希望这对你和其他人将来有用

再次感谢

<import namespace="http://www.w3.org/2000/09/xmldsig#" schemaLocation="xmldsig-core-schema.xsd" />