Лучшим вариантом является использование jax-ws-catalog.xml
Когда вы компилируете локальный файл WSDL, переопределяете местоположение WSDL и задаете для него что-то вроде
http://localhost/wsdl/SOAService.wsdl
Donне беспокойтесь, это всего лишь URI, а не URL, то есть вам не нужно иметь WSDL по этому адресу.
Вы можете сделать это, передав параметр wsdllocation в wsdl компилятору java.
Это изменит ваш прокси-код с
static {
URL url = null;
try {
URL baseUrl;
baseUrl = com.ibm.eci.soaservice.SOAService.class.getResource(".");
url = new URL(baseUrl, "file:/C:/local/path/to/wsdl/SOAService.wsdl");
} catch (MalformedURLException e) {
logger.warning("Failed to create URL for the wsdl Location: 'file:/C:/local/path/to/wsdl/SOAService.wsdl', retrying as a local file");
logger.warning(e.getMessage());
}
SOASERVICE_WSDL_LOCATION = url;
}
на
static {
URL url = null;
try {
URL baseUrl;
baseUrl = com.ibm.eci.soaservice.SOAService.class.getResource(".");
url = new URL(baseUrl, "http://localhost/wsdl/SOAService.wsdl");
} catch (MalformedURLException e) {
logger.warning("Failed to create URL for the wsdl Location: 'http://localhost/wsdl/SOAService.wsdl', retrying as a local file");
logger.warning(e.getMessage());
}
SOASERVICE_WSDL_LOCATION = url;
}
Файл уведомления: // в конструкторе URL изменен на http: //.
Теперь входит в jax-ws-catalog.xml.Без jax-ws-catalog.xml jax-ws действительно попытается загрузить WSDL из местоположения
<a href="http://localhost/wsdl/SOAService.wsdl" rel="noreferrer">http://localhost/wsdl/SOAService.wsdl</a>
и завершится неудачей, поскольку такой WSDL не будет доступен.
Но с jax-ws-catalog.xmlвы можете перенаправить jax-ws в локально упакованный WSDL всякий раз, когда он пытается получить доступ к WSDL @
<a href="http://localhost/wsdl/SOAService.wsdl" rel="noreferrer">http://localhost/wsdl/SOAService.wsdl</a>
.
Вот jax-ws-catalog.xml
<catalog xmlns="urn:oasis:names:tc:entity:xmlns:xml:catalog" prefer="system">
<system systemId="http://localhost/wsdl/SOAService.wsdl"
uri="wsdl/SOAService.wsdl"/>
</catalog>
Что вы делаетесообщает jax-ws, что когда ему необходимо загрузить WSDL из
<a href="http://localhost/wsdl/SOAService.wsdl" rel="noreferrer">http://localhost/wsdl/SOAService.wsdl</a>
, он должен загрузить его по локальному пути wsdl / SOAService.wsdl.
Теперь куда следует поместить wsdl / SOAService.wsdl и jax-ws-catalog.xml?Это вопрос на миллион долларов, не так ли?
Он должен быть в каталоге META-INF вашего приложения jar.
так что-то вроде этого
ABCD.jar
|__ META-INF
|__ jax-ws-catalog.xml
|__ wsdl
|__ SOAService.wsdl
Таким образом, вам даже не придется переопределять URL в вашем клиенте, который обращается к прокси.WSDL выбирается из вашего JAR-файла, и вам не нужно иметь жестко запрограммированные пути файловой системы в вашем коде.
Дополнительная информация о jax-ws-catalog.xml http://jax -ws.java.net/nonav/2.1.2m1/docs/catalog-support.html
Надеюсь, что поможет