开发者

WSDL Requests with Metro/JAX-WS/WSIT During Runtime

开发者 https://www.devze.com 2023-01-27 09:51 出处:网络
During runtime, JAX-WS fetches the WSDL of a SOAP endpoint even though it already ran wsimport in the IDE. This behavior is illustrated here: http://jax-ws.java.net/faq/index.html#wsdl_at_runtime

During runtime, JAX-WS fetches the WSDL of a SOAP endpoint even though it already ran wsimport in the IDE. This behavior is illustrated here: http://jax-ws.java.net/faq/index.html#wsdl_at_runtime

Is there a limit to开发者_高级运维 amount of metadata that a client can retrieve during runtime? If so, is there a way to increase this limit?

Please note that I am not referring to running wsimport inside the IDE; that works fine. I'm specifically talking about fetching the WSDL metadata during runtime.


After many long hours spent on this problem, we came up with a solution. I was working in a Glassfish environment with Metro in Netbeans. If we copied the WEB-INF to the source packages folder everything worked. The java runtime could now bind to the relative path in the jaxws-catalog.xml file. Without copying that folder, it wouldn't work.


Metro/JAX-WS-ri needs the WSDL at runtime, period. See http://jax-ws.java.net/faq/index.html#wsdl_at_runtime for an explanation.

To prevent WSDL fetch at runtime you should package it as a resource and provide it when instanciating the proxy factory :

new XYZ_Service( XYZ_Service.class.getResource( "/path/to/your/XYZ.wsdl" ), new QName( "NameSpace", "ServiceName" ) );


Based on the fact that you refer to the Metro FAQ, you obviously have read about the reasons as to why a copy of the WSDL is still needed at runtime. To reiterate the FAQ, the reason is to be able to support WS-* extensions that have no corresponding Java annotations.

There is currently no possibility in Metro to disable support for extensions and as a consequence no way to bypass the need for a WSDL at runtime.

0

精彩评论

暂无评论...
验证码 换一张
取 消