2015-04-17 11 views
7

Wir haben einen Axis2-Client, der von einem SOAP-Webdienst liest; Ein Problem trat auf, wenn neue Client-Stub-Klassen mit WSDL2JAVA generiert und ihre Pakete umbenannt wurden. Das Generierungs-Tool selbst verursacht das Problem nicht, aber WSDL2JAVA ist nicht das Umbenennen von Paketen für alle Klassen, also muss ich das selbst tun.Benutzerdefinierte Service-Ausnahmen werden als AxisFault geworfen

Haben Sie eine Idee, wie Sie Pakete für diese Klassen am besten umbenennen können, ohne Probleme zu haben? Wie macht man einen String-Ersatz auf intelligente Weise?

Der Webdienst löst in einigen Fällen Geschäftsausnahmen aus, die direkt vom aufrufenden Code abgefangen werden. Dies geschieht jedoch nicht mehr und statt SPECIALException fängt der Client jetzt AxisFault ab.

Sie die XML-Antwort unten sehen können:

<?xml version='1.0' encoding='utf-8'?> 
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"> 
    <soapenv:Body> 
     <soapenv:Fault> 
      <faultcode>soapenv:Server</faultcode> 
      <faultstring>Exception message, due to business error.</faultstring> 
      <detail> 
       <ns2:SPECIALException 
        xmlns:ns2="http://com.bla.com/common/exception/xsd/2008/08"> 
        <ns2:code>7</ns2:code> 
        <ns2:message>Exception message, due to business error.</ns2:message> 
       </ns2:SPECIALException> 
      </detail> 
     </soapenv:Fault> 
    </soapenv:Body> 
</soapenv:Envelope> 

dies genauer prüfen, ist der Unterschied wahrscheinlich aufgrund Methode populateFaults in der generierten Bla ServiceStub Klasse, wo Klassennamen als Strings festgelegt für später durch Reflexion verwenden.

+0

wenn es vom Server ist. Sie können mit dem Serverseite-Team überprüfen, was in Ihrer Anfrageverarbeitung schief läuft. Vergessen Sie nicht, die Anfrage- und Antwort-XML-Dateien mit ihnen zu teilen. – Salman

+0

Es kommt nicht vom Server, es stellt sich heraus: Wenn ich mit WSDL2JAVA neuen Code erzeuge, klappt es. Aber ich muss das Paket umbenennen, die Verwendung von -p 'packageName' benennt nur einen Teil der Klasse um, und das Umbenennen der Pakete für weitere Klassen bewirkt, dass die Ausnahme wieder zu AxisFault wird. –

+0

Ich weiß nicht tief Axis2, aber in Achse 1, wenn Sie Klassen von Wsdl generiert generiert es auch WSDD-Dateien; In diesen Dateien finden Sie auch die Paketdefinition; Hast du nach der Code-Generierung überprüft, ob es Dateien gibt? Hast du den Dateiinhalt überprüft? In jedem Fall denke ich, dass der einfachste Weg zum Generieren von Klassen darin besteht, die von Axis bereitgestellte Ant-Aufgabe zu verwenden –

Antwort

1

Dies wurde durch eine String-Ersetzung in allen generierten Stub-Klassen gelöst, während der gesamte Paketname nicht geändert wurde, also sagen Sie '-p com.my.company.network.stubs in generation', dann für Verbleibende Pakete unter 'com.bla.blo.bli', nicht umbenennen zu 'com.my.company.network.stubs.bli', aber tun Sie es zu 'com.my.company.network.stubs.bla.blo. bli '