carookee - group communication for you
Home / JavaForum / Networking
Infos   |   Features   |   Gold-Edition   |   Kundenservice   
java
  Übersicht
  Forum
Beginner
Java allgemein
JDBC
JNI
Networking
Online-Ressourcen
Swing + AWT
XML
Meckerecke
  Mitglieder
LOGIN





· Passwort vergessen
· Kostenlos anmelden
  Information
  Demo
  Features
  Im Vergleich
  Anmeldung
SUCHE
Beiträge, Foren oder Verfasser finden:
  Kundenservice
  Impressum
  Datenschutz
  AGB
Status
5.840 User online
1 User eingeloggt
 

Beiträge
   Antworten     Neuer Beitrag    

Beitrag 23 von 610 (4%) |<   <   >   >|

Autor Bobby
Datum 11.02.06, 20:12
Betreff Web Services: Java-Client für eBay-SOAP-API liefert HTTP(400) Bad Request


Hallo zusammen,

hat jemand Erfahrung mit der Nutzung der SOAP API von Ebay. Ich versuche nun schon seit Tagen, die Ebay-SOAP API mit meinem Java-Client anzusprechen, doch ich erhalte immer die gleiche Antwort:

(400)Bad Request
Your browser sent a request that this server could not understand.
The request line contained invalid characters following the protocol string.
Apache/1.3.27 Server at thrasher.sjc.ebay.com Port 8080;

Der Client hat folgenden Code:


public class EbayBookSearch {
    
    private static String appId = "Dummy";
    private static String devId = "Dummy";
    private static String certId = "Dummy ";
    private static String apiOperation = "GetSearchResults";
    private static String apiVersion = "443";
    private static String siteIdUS = "0";
    private static String myToken = ?Dummy?
    private static String parametersURL = new String("?callname=" + apiOperation + "&siteid="
    + siteIdUS + "&appid= " + appId + "&version=" + apiVersion + "&Routing=new");
    private static String requestURL = endpointURL + parametersURL;
    
    
    public static void main(String[] args) {
        try {
            EBayAPIInterfaceServiceLocator serviceLocator = new EBayAPIInterfaceServiceLocator();
            EBayAPIInterface service = serviceLocator.geteBayAPI(new URL(requestURL));
            EBayAPISoapBindingStub serviceClient = (EBayAPISoapBindingStub) service;
            
            //Setting SOAP Header for Authentication
            
            SOAPHeaderElement registrationData = new SOAPHeaderElement("urn:ebay:apis:eBLBaseComponents", "RequesterCredentials");
            registrationData.setMustUnderstand(false);
            registrationData.addChildElement("eBayAuthToken").addTextNode(myToken);
            SOAPElement developerTokens = registrationData.addChildElement("Credentials");
            developerTokens.addChildElement("AppId").addTextNode(appId);
            developerTokens.addChildElement("DevId").addTextNode(devId);
            developerTokens.addChildElement("AuthCert").addTextNode(certId);
            serviceClient.setHeader(registrationData);
            //Header-End
            
            //Setting Call
            GetSearchResultsRequestType bookSearchObject = new GetSearchResultsRequestType();
            bookSearchObject.setVersion("443");
            
            ExternalProductIDType isbnObject = new ExternalProductIDType();
            isbnObject.setValue("1575211424");
            isbnObject.setType(ExternalProductCodeType.ISBN);
            bookSearchObject.setExternalProductID(isbnObject);
            
            //Invoking Call
            GetSearchResultsResponseType searchResponse = serviceClient.getSearchResults(bookSearchObject);
            SearchResultItemType[] booksArray = searchResponse.getSearchResultItemArray();
            for(int i =0; i < booksArray.length; i++) {
                EbayBook bookInstance = new EbayBook();
                bookInstance.setIsbn(booksArray[i].getItem().getExternalProductID());
                bookInstance.setPrice(booksArray[i].getItem().getStartPrice());
            }
        }
        catch (Exception e) {
            System.out.println("");
            System.out.println("Error occured! Message is: " + e.getMessage());
            System.out.println("StackTrace is: ");
            e.printStackTrace();
        }
    }
}


Die im Code verwendeten Java-Klassen (Interfaces, Stubs,...) habe ich aus der eBayAPI-WSDL mit Hilfe von Apache Axis 1.3 WSDL2Java generiert. Alternativ habe ich auch die Version Axis 1.1 ausprobiert. Kein Erfolg.

Ich vermute, dass der in SOAP codierte Request ein falsches Format aufweist, nur diesen anzuzeigen, ist mir nicht gelungen, da der SOAP Monitor (SOAP Spy von Systinet) anscheinend nur erfolgreiche Anfragen anzeigt. Lediglich den SOAP-Header konnte ich durch Anbindung an einen funktionierenden Amazon-Client anzeigen. Er hat folgende Form:

<soapenv:Header>
<ns1:RequesterCredentials
soapenv:actor="http://schemas.xmlsoap.org/soap/actor/next"
soapenv:mustUnderstand="0" xmlns:ns1="urn:ebay:apis:eBLBaseComponents">
<ns1:eBayAuthToken>?</ns1:eBayAuthToken>
<ns1:Credentials>
<ns1:DevId>?</ns1:DevId>
<ns1:AppId>?</ns1:AppId>
<ns1:AuthCert>...</ns1:AuthCert>
</ns1:Credentials>
</ns1:RequesterCredentials>
</soapenv:Header>


Aber dieser ist zumindest konform zur API-Dokumentation (Vers. 443) und sollte daher nicht Ursprung des Übels sein. Für die Erstellung bzw. Ausführung des Clients verwende ich Elipse 3.1. Als JDK verwende Version 1.5 bzw. mit Version 1.4.2 habe ich es auch schon versucht. Kann mir jemand einen Tip geben, wo die Ursache liegen könnte. Mir wäre auch schon geholfen mit einen TCP/IP Monitor Tool, das auch bei erfolgloser Kommunikation den SOAP-Request anzeigt.

Besten Dank im Voraus.

Bobby


Diskussionsverlauf:
Web Services: Java-Client für eBay-SOAP-API liefert HTTP(400) Bad Request
    Re: Web Services: Java-Client für eBay-SOAP-API liefert HTTP(400) Bad Request

 Auf diesen Beitrag antworten
 Neuen Beitrag verfassen


|<   <   >   >|

                                                                                                                                                                                                                           

Impressum  · Datenschutz  · AGB  · Infos  · Presse
Ein modernes Forum: teamturn.com