/* * Class: VirticBaustelle * * Date: 12/01/2014 * Time: 2:04:36 PM */ import java.net.*; import java.math.BigDecimal; import baustelleSvc.virtic.*; import baustelle.baustelleSvc.virtic.*; import baustelle.baustelleSvc.virtic.holders.*; import javax.xml.rpc.holders.*; import org.apache.axis.AxisFault; import org.w3c.dom.Element; import org.w3c.dom.Node; /** * Web Services client Anwendungsbeispiel * erzeugt duurch Apache Axis 1.4 release WSDLtoJava utility. Die WSDL * Datei ist erzeugt durch den wsa Service auf dem virtic SOAP Server * */ public class VirticBaustelle { /* * Default Constructor */ public VirticBaustelle() { } /* * Run method. */ public void run(String[] args) throws Exception { // baustelle client service erzeugen WsBaustelleService service = new WsBaustelleServiceLocator(); // bei Aufruf kann eine Test URL angegeben worden sein // um durch einen network proxy monitor den HTTP message traffic zu debuggen. // URL connectURL = new URL( (args.length == 0) ? service.getwsBaustelleObjAddress() : args[0]); System.out.println("Verbinden mit URL...: " + connectURL.toString()); // Debug Messages des Message Handlers erst mal nicht einschalten. // boolean debugHandler = false; // Schalter zum Erinnern an zu erledigende // Aufrämarbeiten setzen der Server und Anwendungsobjekte setzen // die muss immer nach diesem Schema erfolgen boolean releaseServiceObject = false; boolean releaseBaustelleObject = false; // definiert die Namen nach denen der Object ID handler // in den SOAP Nachrichten suchen soll. Weil einige Operationen // in der ANfrage eine ID senden und in der Antwort eine andere // zurückerhalten muss der ID Handler über alle ID informiert werden // Hier kann man nach folgenden Muster verfahren // - eine Handler mit dem selben Namen wie das mit "ws" beginnende Verzeichnis // - ein Handler mit dem Namen des Verzeichnisses, welches den fachlichen Kontext beschreibt. // Diese Verzeichnisse sind durch das wsdl2Java Programm aus dem AXIS Toolkit entstanden String[] baustelleInfoObjectNames = new String[] { "wsBaustelle", "baustelle" }; HandlerControlBlock serviceControlBlock = null; serviceControlBlock = PscObjectIDHandler.registerObjectIDHandler( service, baustelleInfoObjectNames, "", "servicePort", debugHandler); HandlerControlBlock baustelleControlBlock = null; baustelleControlBlock = PscObjectIDHandler.registerObjectIDHandler( service, baustelleInfoObjectNames, "", "baustellePort", debugHandler); // Now generate the OrderInfo & CustomerOrder Web Service Application's // client objects that will do all the marshalling and unmarshalling for // the SOAP and HTTP messages. // WsBaustelleObjStub bstConnect = (WsBaustelleObjStub) service .getwsBaustelleObj(connectURL); BaustelleObjStub bstService = (BaustelleObjStub) service .getbaustelleObj(); // Set the port type name manually for an Axis client, as the stubs // den Port type Namen manuell für diesen AXIS-Client vergeben // da es noch nicht automatisch vom toolkit gemacht wird bstConnect.setPortName("servicePort"); bstService.setPortName("baustellePort"); try { // Verbindung zum Server Object wsBaustelle // // !!!! Tragen sie hier ihre AnmeldeInformationen ein // Benutzer,Kennwort,Firma-ID // Die jetzigen Werte stammen von einem Testzugang // Zugangsdaten erhalten sie beim virtic Kundendienst bstConnect.connect_wsBaustelle("personal", "*****", "******"); if (null == serviceControlBlock.getObjectNameID("wsBaustelle")) { throw new Exception( "Keine ID mit SOAP Header zurückgegeben bstConnect"); } System.out.println("Baustelle Verbindung(SOAP HEADER) ID: " + serviceControlBlock .getObjectNameID("wsBaustelle")); // daran denken, dass Proxy Object freizugeben. releaseServiceObject = true; // das Anwendungsobject Object auf dem Server starten String result = bstConnect.createPO_baustelle(); if (null == serviceControlBlock.getObjectNameID("baustelle")) { throw new Exception( "Kein Header erhalten bei create operation fuer bstService"); } // den SOAP Header ausgeben System.out.println("Baustelle object connection returned ID: " + serviceControlBlock.getObjectNameID("baustelle")); // die Kontext ID, die durch createPO_baustelle im Objekt // bstConnect jetzt enthalten ist, muss // im Header aller folgenden Aufrufe mit gesendet werden baustelleControlBlock.importObjectID("baustelle", serviceControlBlock.exportObjectID("baustelle")); // daran denken, dass Proxy Object freizugeben. releaseBaustelleObject = true; StringHolder cErr = new StringHolder (""); try { // Diese ID muss bekannt sein und ist nur für den test ,ist // dem personal Account gültig // Verwenden sie hier bitte eine ID aus ihrem Baustellenstamm, falls vorhanden long iObjId = 44370981; String cFremdId = null; String cQueryString = ""; StringHolder q_result = new StringHolder(""); // Holder Klasse für die Ausgabe Zeilen BaustelleV100OutParamHolder baustelleV100OutHolder = new BaustelleV100OutParamHolder(null); // Zeilen gem. Filterkriterien (iObjId)per Fetch Methode laden. bstService.fetchV100(iObjId, cFremdId, cQueryString, q_result, baustelleV100OutHolder, cErr); System.out.println("Meldung bei Methode fetch100:" + cErr.value); // Zeile Array BaustelleV100OutRow[] rows = (BaustelleV100OutRow[]) baustelleV100OutHolder.value; // mal Anzeigen.... for (int j = 0; j < rows.length; j++) { BaustelleV100OutRow thisRow = rows[j]; System.out.println(thisRow.getBstBez() + " " + thisRow.getBstFremdId()); } // Neuen Datensatz anlegen bzw. existierenden Datensatz aendern BaustelleV100InRow[] baustelleV100In = new BaustelleV100InRow[1]; baustelleV100In[0] = new BaustelleV100InRow(); baustelleV100In[0].setFirObjId(2045482l); baustelleV100In[0].setBstBez("Meier Karin"); baustelleV100In[0].setBstFremdId("123456789"); String cFieldList = "bstBez,bstFremdId"; try{ BaustelleV100OutParamHolder baustelleUpdateOut = new BaustelleV100OutParamHolder(); StringHolder updresult = new StringHolder(""); bstService.updateV100(cFieldList, baustelleV100In, updresult, baustelleUpdateOut, cErr); BaustelleV100OutRow[] outrows = (BaustelleV100OutRow[]) baustelleUpdateOut.value; System.out.println("Fehler im update:" + cErr.value); System.out.println("Ausgabe zeilen:" + outrows.length); for (int j = 0; j < outrows.length; j++) { BaustelleV100OutRow thisRow = outrows[j]; System.out.println(thisRow.getBstObjId() + " : " + thisRow.getBstBez() + " : " + thisRow.getBstFremdId()); } } // falls eine NULL Value durch Progress zurückggen wurde, hier abfangen catch (NullPointerException ex) { System.out.println("Null Pointer Fehler"); } } catch (Exception con) { System.err.println("Fehlermeldung bei Methode fetch100" + con.getMessage() ); } bstService.release_baustelle(); releaseBaustelleObject = false; serviceControlBlock.setRequestObjectIDName("wsBaustelle"); bstConnect.release_wsBaustelle(); baustelleControlBlock.releaseObjectNameID("baustelle"); baustelleControlBlock.releaseObjectNameID("WsBaustelle"); releaseServiceObject = false; System.out.println("Fertig"); } catch (Exception e) { System.err.println("Caught Exception Type: " + e.getClass().getName()); System.err.println("Caught Exception Type: " + e.getMessage()); // ((AxisFault)e).getFaultCode().toString()); // System.err.println("Exception getFaultString: " + // ((AxisFault)e).getFaultString().toString()); Element[] faultDetails = ((AxisFault) e).getFaultDetails(); if (faultDetails.length > 0) { Node faultDetailElem = faultDetails[0].getFirstChild(); String detailErrorMsg = faultDetailElem.getFirstChild() .getNodeValue(); System.err.println("Exception errorMessage: " + detailErrorMsg); Node requestIDElem = faultDetailElem.getNextSibling(); String requestID = requestIDElem.getFirstChild().getNodeValue(); System.err.println("Exception requestID : " + requestID); } else { System.err.println("Exception: no fault details"); } System.err.println("Cleaning up connections..."); try{ bstService.release_baustelle(); } catch(Exception ex){ System.err.println(ex.toString()); } try{ bstConnect.release_wsBaustelle(); } catch(Exception ex){ System.err.println(ex.toString()); } } } public static void main(String[] args) { VirticBaustelle THIS = new VirticBaustelle(); try { THIS.run(args); } catch (Exception e) { System.out.println("Error: " + e.toString()); } } }