# SOAP Message abfangen und auslesen



## DayXtry (22. Jan 2007)

Hi,
hab ein rießen Problem mit eBay und SOAP Message empfangen -> auslesen.

Also folgendes. Wenn man bei eBay ein Produkt erfolgreich verkauft hat, dann wird ja eig. dem Verkäufer eine email mit der Bestätigung zu gesendet. Dies kann man mittels eBay API eben umschreiben und sich die SOAP Message auf den Server schicken lassen, um dort damit weiter zu arbeiten...

Das sieht wie folgt aus:

```
// Register the eBay user and the Application
        ...
        ...
        ...

        // Create and Set the App Level Preference
        ApplicationDeliveryPreferencesType appDeliveryPref = new ApplicationDeliveryPreferencesType();


        org.apache.axis.types.URI uri = new org.apache.axis.types.URI();

        try {
            //uri.setScheme("mailto");
            
            // URL from Webserver where the application runs
            uri.setPath("http://138.232.185.227:8084/notification2/");
            //uri.setPath("mailto:juergen.ulrich1@web.de");
        } catch (Exception e) {
            e.printStackTrace();
        }


        appDeliveryPref.setApplicationURL(uri);
        appDeliveryPref.setNotificationPayloadType(NotificationPayloadTypeCodeType.eBLSchemaSOAP);
        appDeliveryPref.setApplicationEnable(EnableCodeType.Enable);
        api.setApplicationDeliveryPreferences(appDeliveryPref);

        ...
        ...
        ...
```

Wie man bei der auskommentierten Zeile sieht, hab ich versucht mir die SOAP Message an eine Email Adresse zu schicken. Das klappt wunder bar,...ich bekomm also den Inhalt der SOAP Message na die Email Adresse geschickt. Mein Problem ist nur, dass wenn ich den Server angeb, dass ich dann nix bekomm. Bzw. vielleicht bekomm ich ja was, und ich reagier nur falsch drauf. Aber ich hab zum testen des ganzen ein bsp. Listener von eBay verwendt.

Hier mal die doPost()-Methode:

```
/** Handles the HTTP <code>POST</code> method.
     * @param request servlet request
     * @param response servlet response
     */
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
        try {
            // Getting The Header Of The Soap request
            MimeHeaders headers = getHeaders(request);
            
            // Get the body of the SOAP request
            InputStream is = request.getInputStream();
                  /*
          SOAPMessage message = SOAPUtil.setMessage(is,headers);
          OutputStream os = response.getOutputStream();
          message.writeTo(os);
          os.flush();
                   */
            
            // Process Notification http header
         
            String notiEvent = null;
            java.util.Enumeration headenum = request.getHeaderNames();
            while(headenum.hasMoreElements()){
                String headname = (String)headenum.nextElement();
                String headvalue = request.getHeader(headname);
                if (headname.equalsIgnoreCase("SOAPACTION")){
                    int last = headvalue.lastIndexOf("/");
                    notiEvent =headvalue.substring(last+1,headvalue.length());
                    System.out.println(headname + " : " + headvalue);
                    System.out.println("NOTIFICATION EVENT : " + notiEvent);                    
                }
            }
            String rootElement= null;
                  
                  for ( int i = 0; i< noticationevents.length; i++) {
                      String eventname = noticationevents[i];
                          if ( notiEvent.equalsIgnoreCase(eventname)){
                                  rootElement =  noticationtopelements[i];
                                  System.out.println("ROOTELEMENT : " +rootElement);
                          }
                  }
                   
            // read input string
            // Es muss eine Methode onMessage enthalten sein, welche aufgerufen und abgearbeitet wird,
            // sobald eine Nachricht eintrifft
            Object obj =  onMessage(is, rootElement);//"GetItemResponse" );
            ItemType itemtype =null;
            if (obj !=null && obj instanceof GetItemResponseType) {
                GetItemResponseType girt = (GetItemResponseType)obj;
                traverseItem(girt);
                System.out.println( "GET EVENT NAME : "+ girt.getNotificationEventName());
                itemtype = girt.getItem();
                PrintWriter pw = response.getWriter();
                pw.println("<html><head>");
                pw.println("</head><body><h3> the itemId is " + itemtype.getItemID()+"</h3>");
                pw.println("</bodY></html>");    
            }
            
            if (obj !=null && obj instanceof GetItemTransactionsResponseType) {
                GetItemTransactionsResponseType girt = (GetItemTransactionsResponseType)obj;
                itemTransac(girt);
                System.out.println( "Notification: "+ girt.getNotificationEventName());     
            }
            
        }catch (Exception e) {
            e.printStackTrace();
            response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
        }
        //response.setStatus(HttpServletResponse.SC_OK);
    }
```

Ich wäre wirklich sehr sehr sehr glücklich über jede Hilfe, die ich bekommen kann,...und wenn sie noch so klein sein mag.

Mit freundlichen Grüßen
DayXtry

PS.: Sollte noch mehr Code zum Verständnis benötigt werden, einfach bescheid sagen. Die Kommentare im Code wurden von mir verfasst, also wenn da fehler enthalten sein sollten, nicht wundern (da eBay einen etwas mager kommentierten Code zur Verfügung stellt). (ist wirklich im wahrsten Sinne des Wortes ein Hilfeschrei)


----------



## DayXtry (22. Jan 2007)

Ok,...hab da noch was rausgefunden...wenn ich meinen Tomcat starte kommt da folgendes:


```
22.01.2007 13:46:46 org.apache.catalina.core.StandardContext listenerStart
SCHWERWIEGEND: Error configuring application listener of class com.sun.faces.config.ConfigureListener
java.lang.NoClassDefFoundError: javax/faces/FacesException
        at java.lang.Class.getDeclaredConstructors0(Native Method)
        at java.lang.Class.privateGetDeclaredConstructors(Class.java:2357)
        at java.lang.Class.getConstructor0(Class.java:2671)
        at java.lang.Class.newInstance0(Class.java:321)
        at java.lang.Class.newInstance(Class.java:303)
        at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:3618)
        at org.apache.catalina.core.StandardContext.start(StandardContext.java:4104)
        at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:759)
        at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:739)
        at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:524)
        at org.apache.catalina.startup.HostConfig.deployDirectory(HostConfig.java:894)
        at org.apache.catalina.startup.HostConfig.deployDirectories(HostConfig.java:857)
        at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:475)
        at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1102)
        at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:311)
        at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:119)
        at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1020)
        at org.apache.catalina.core.StandardHost.start(StandardHost.java:718)
        at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1012)
        at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:442)
        at org.apache.catalina.core.StandardService.start(StandardService.java:450)
        at org.apache.catalina.core.StandardServer.start(StandardServer.java:683)
        at org.apache.catalina.startup.Catalina.start(Catalina.java:537)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:585)
        at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:271)
        at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:409)
```

Hab mal per google geschaut, und dann steht da was, dass mir die jsf-api.jar und die jsf-impl.jar fehlen,...allerdings sind die bei mir im Verzeichnis lib des projektes enthalten...

Kann es sein, dass der Listener deswegen nicht anspricht?

Danke schon mal für eure Antworten

Gruß DayXtry


----------



## Guest (22. Jan 2007)

Kann mir denn hier wirklich niemand weiterhelfen?  :shock:


----------



## DayXtry (23. Jan 2007)

ok,...ich hab in der web.xml jetzt auch folgendes stehen:


```
<listener>
    <listener-class>com.sun.faces.config.ConfigureListener</listener-class>
</listener>
```

Allerdings besteht das Problem der Fehlerausgabe weiterhin.

Allerdings empfange ich definitiv etwas von eBay. Sobald ich bei eBay jetzt ein Produkt varkauft habe, wird bei mir automatisch die index.jsp aufgerufen,...Ich denke mal, dass die index.jsp aufgerufen wird, da der Listener nicht richtig funktioniert. Ansonsten müsste er ja in die doPost()-Methode springen.

Zur erläuterung, warum er in die index.jsp springt:

Ich registriere ja meine Application bei eBay mit der angabe des Pfades zu meiner Application (http://138.232.185.227:8084/notification2). Da das Verzeichnis notification2 das Hauptverzeichnis des Projektes ist, sucht er dort nach der index.jsp. Hätte ich nun einen Listener (der funktioniert -.-) würde er auf den Listener reagieren.

Hat denn wirklich keiner n Tipp für mich? Ist wirklich sehr sehr wichtig.


----------

