wsimport tool'u (ver : jaxws-ri-2.2.10)
ile bir wsdl üzerinden ilgili web servisine erişebilmek için gerekli dosyaları
generate etmek için komut satırından
C:\path\to\jaxws-ri-2.2.10\jaxws-ri\bin>wsimport
-keep -verbose http://some_service_url:1111/service_name?WSDL -p
com.cenkc.ws.service_name -d \path\to\files_to_be_generated
komutunu çalıştırdığımda aşağıdaki gibi
bir hata aldım :
"[ERROR] Schema descriptor
{http://some_url/service_name/schemas}SomeElementName in message part
"request" is not defined and could not be bound to Java. Perhaps the
schema
descriptor {http://some_url/service_name/schemas}SomeElementName is
not defined in the schema imported/included in the WSDL. You
can either add
such imports/includes or run wsimport and provide the schema location using -b
switch.
line 5 of http://some_service_url:1111/service_name?WSDL
Exception in thread
"main" com.sun.tools.ws.wscompile.AbortException
at com.sun.tools.ws.processor.modeler.wsdl.WSDLModelerBase.error(WSDLModelerBase.java:747)
at
com.sun.tools.ws.processor.modeler.wsdl.WSDLModeler.getJAXBType(WSDLModeler.java:1662)
at
com.sun.tools.ws.processor.modeler.wsdl.WSDLModeler.getDoclitParameters(WSDLModeler.java:1688)
at
com.sun.tools.ws.processor.modeler.wsdl.WSDLModeler.processLiteralSOAPOperation(WSDLModeler.java:790)
at
com.sun.tools.ws.processor.modeler.wsdl.WSDLModeler.processSOAPOperation(WSDLModeler.java:713)
at
com.sun.tools.ws.processor.modeler.wsdl.WSDLModeler.processPort(WSDLModeler.java:481)
at
com.sun.tools.ws.processor.modeler.wsdl.WSDLModeler.processService(WSDLModeler.java:259)
at com.sun.tools.ws.processor.modeler.wsdl.WSDLModeler.internalBuildModel(WSDLModeler.java:231)
at
com.sun.tools.ws.processor.modeler.wsdl.WSDLModeler.buildModel(WSDLModeler.java:141)
at
com.sun.tools.ws.wscompile.WsimportTool.buildWsdlModel(WsimportTool.java:444)
at com.sun.tools.ws.wscompile.WsimportTool.run(WsimportTool.java:205)
at com.sun.tools.ws.wscompile.WsimportTool.run(WsimportTool.java:183)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at com.sun.tools.ws.Invoker.invoke(Invoker.java:174)
at com.sun.tools.ws.WsImport.main(WsImport.java:57)"
İlk önce hata mesajında belirtilen schema
descriptor linkini (http://some_url/service_name/schemas)
açmayı denedim ve başarısız oldum.
Ardından, http://some_service_url:1111/service_name?WSDL linkini açtığımda, hata açıklamasında yazan "request"
kısmını arattım, aşağıdaki bölüm geldi :
Buradaki element bilgisi olan "nsx1:..."
in wsdl'daki karşılığı xmlns:nsx1="http://some_url/service_name/schemas" şeklinde. Ama wsimport tool'u bu url'e
erişemediği için hata alıyor olduğum konusu netleşti.
Hatayı araştırırken wsimport komutunun "-b" parametresi
ile başka bir schema tanımlanarak çalıştırılabileceğini gördüm. Örnekte bu bir
xsd dosyası (XML Schema Definition) idi.
C:\path\to\jaxws-ri-2.2.10\jaxws-ri\bin>wsimport
–help
Usage:
wsimport [options]
where
[options] include:
-b
specify jaxws/jaxb binding files or additional schemas
(Each
must have its own -b)
wsimport tool'unu, WSDL içindeki ilgili
xsd'nin location bilgisini () kullanacak şekilde aşağıdaki gibi düzenlediğimde
sorun düzeldi :
wsimport -keep -verbose
http://some_service_url:1111/service_name?WSDL -p com.cenkc.ws.service_name -d \path\to\files_to_be_generated
-b http://some_service_url:1111/service_name?WSDL/service_name.xsd