26 Kasım 2015 Perşembe

wsimport ile client generate işleminde alınan hata

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

1 yorum:

  1. Merhaba, Konuyla direk alakalı değil ama bir kaç gündür SSL üzerinden hizmet veren bir web servisine bağlanmaya çalışıyorum. Ancak bir türlü beceremedim. SOAPUI aracı ile bir mock SSL oluşturup bağlantıyı sağladım ama java tarafında bunu nasıl yapabilirim bulamadım. Java konusunda çok bilgiye sahip değilim bu konuda yardımınız olur mu?

    YanıtlaSil