Domanda

sto convertendo alcuni servizi da Apache SOAP per Axis2, quindi esistono già le classi di servizio Java. Ho creato un nuovo progetto in Eclipse, importato la fonte, sono assicurato che sono state installate le sfaccettature del progetto axis2, e Axis2 emettitore proprietà siano corrette. Poi, in Eclipse, ho selezionato la classe di servizio e ha scelto "Create Web Service," la scelta del tempo di esecuzione Axis2. Il servizio è attivo e funzionante sul mio PC, e quando ho aggiungere "? Wsdl" per il percorso del servizio, io davvero ottenere un WSDL che risparmio a livello locale. Il tentativo di importare questo in SoapUI per costruire un cliente dà l'errore:

ERROR:org.apache.xmlbeans.XmlException: C:\projects\soapUI\Axis2\DALService.wsdl:0: error: src-resolve: type 'SOAPException@http://www.w3.org/2001/XMLSchema' not found.

Il tipo si riferisce a (SOAPException) è un residuo dei servizi SOAP Apache, e nel codice di servizio, ho cambiato tutte le "importare" i riferimenti nel codice di servizio (non il WSDL) da org.apache.soap.SOAPException (il vecchio pacchetto SOAP Apache nome) per javax.xml.soap.SOAPException (la posizione Axis2). Il codice compila e funziona, una volta che io possa accedere, ma non posso accedervi senza generare un cliente. Qualche idea sul perché cambiare lo spazio dei nomi di un oggetto voluto mantenere il WSDL generati da avere i riferimenti dello spazio dei nomi corretto?

È stato utile?

Soluzione 2

Mi permetta di essere il primo a dire che ho idea del perché niente di tutto questo è il caso, ma la mia ipotesi è il contenuto esatto dello spazio dei nomi non può importa fintanto che sono tutti uguali. Non stiamo anche utilizzando tutte le caratteristiche speciali di SOAPException, perché si estende solo ciecamente l'eccezione regolare. In ogni caso, sono stato in grado di ottenere SoapUI per costruire i clienti dal XML facendo tre cose.

In primo luogo, ho aggiunto una sezione per rappresentare il SOAPException in sé, come:

    <xs:schema xmlns:test="http://service.PROJECT.DEPARTMENT.COMPANY.com" attributeFormDefault="qualified" elementFormDefault="qualified" targetNamespace="http://DEPARTMENT.COMPANY.com/xsd">
        <xs:import namespace="http://service.PROJECT.DEPARTMENT.COMPANY.com"/>
        <xs:complexType name="SOAPException">
            <xs:complexContent>
                <xs:extension base="ns:Exception">
                    <xs:sequence/>
                </xs:extension>
            </xs:complexContent>
        </xs:complexType>
    </xs:schema>

In secondo luogo, ho aggiunto il seguente spazio alla wsdl: definizioni di blocco:

xmlns:im="http://DEPARTMENT.COMPANY.com/xsd"

In terzo luogo, ho cambiato il dominio citato al tipo di base SOAPException (fron ns a im qui) ovunque sia stato precedentemente riferimento:

    <xs:schema attributeFormDefault="qualified" elementFormDefault="qualified" targetNamespace="http://service.ims.im.sa.homedepot.com/xsd">
        <xs:complexType name="SOAPLocatorException">
            <xs:complexContent>
                <xs:extension base="im:SOAPException">
                    <xs:sequence>
                        <xs:element minOccurs="0" name="message" nillable="true" type="xs:string"/>
                        <xs:element minOccurs="0" name="messageCode" nillable="true" type="xs:string"/>
                    </xs:sequence>
                </xs:extension>
            </xs:complexContent>
        </xs:complexType>
    </xs:schema>

Il file XML ancora non convalida in modo pulito in XMLSpy, ma solo a causa di una ragione più esoterico che non mi riguarda direttamente (le operazioni, che hanno difetti definiti per gli attacchi Soap11 e Soap12, non hanno difetti definito per i binding HTTP prime).

Anche se funziona, io sono ancora un po 'confuso circa il seguente:

  • Se Axis2 conosceva il SOAPException tipo (e lo ha fatto, perché menzionato come classe base della altre eccezioni), perché non lo ha fatto definirlo in un blocco di xs:schema?
  • Lungo queste stesse linee, perché lo ha fatto riferimento alla classe da un errato namespace quando lo si utilizza come base classe per un altro tipo?
  • Perché devo impostare uno spazio dei nomi per il questo tipo DEPARTMENT.COMPANY.com e non sia un pacchetto Axis2 o il pacchetto del servizio oggetto che lo utilizza?

Altri suggerimenti

Basta usare il "xxx? WSDL" URL che ha mostrato il WSDL direttamente in SOAP UI, si presenta come alcuni schemi XSD di cui nel WSDL non vengono trovati dallo strumento SOAP UI, in genere la ricerca di questi strumenti lo schema della nello stesso cartella, anche come si deve org.apache.soap.SOAPException a javax.xml.soap.SOAPException, questo potrebbe essere cambiato lo spazio dei nomi.

Basta provare a utilizzare l'URL completo e vedere il risultato.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top