JavaForum

Willkommen im JavaForum! Schreiben ist hier ohne Anmeldung möglich. Diese ist aber wegen der besseren Bedienung zu empfehlen und schnell erledigt.
Listing-Layout - Board-Layout
 
Sie sind nicht eingeloggt.
LoginLogin Kostenlos anmeldenKostenlos anmelden
BeiträgeBeiträge MembersMitglieder SucheSuche HilfeHilfe
VotesUmfragen FilesDateien CalendarKalender BookmarksBookmarks
Web Services: Java-Client für eBay-SOAP-API liefert HTTP(400) Bad Request

Anfang   zurück   weiter   Ende
Autor Beitrag
Bobby
Gast
New PostErstellt: 11.02.06, 20:12  Betreff: Web Services: Java-Client für eBay-SOAP-API liefert HTTP(400) Bad Request  drucken  Thema drucken  weiterempfehlen Antwort mit Zitat  

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
nach oben
Bobby
Gast
New PostErstellt: 12.02.06, 01:32  Betreff: Re: Web Services: Java-Client für eBay-SOAP-API liefert HTTP(400) Bad Request  drucken  weiterempfehlen Antwort mit Zitat  

Hier noch ein paar zusätzliche Infos zum Error:

Stack Trace:

AxisFault
faultCode: {http://xml.apache.org/axis/}HTTP
faultSubcode:
faultString: (400)Bad Request
faultActor:
faultNode:
faultDetail:
{}:return code: 400
&!DOCTYPE HTML PUBLIC &-//IETF//DTD HTML 2.0//EN&&
&HTML&&HEAD&
&TITLE&400 Bad Request&/TITLE&
&/HEAD&&BODY&
&H1&Bad Request&/H1&
Your browser sent a request that this server could not understand.&P&
The request line contained invalid characters following the protocol string.&P&
&P&
&HR&
&ADDRESS&Apache/1.3.27 Server at newsweek.sjc.ebay.com Port 8080&/ADDRESS&
&/BODY&&/HTML&
{http://xml.apache.org/axis/}HttpErrorCode:400
(400)Bad Request
at org.apache.axis.transport.http.HTTPSender.readFromSocket(HTTPSender.java:744)
at org.apache.axis.transport.http.HTTPSender.invoke(HTTPSender.java:144)
at org.apache.axis.strategies.InvocationStrategy.visit(InvocationStrategy.java:32)
at org.apache.axis.SimpleChain.doVisiting(SimpleChain.java:118)
at org.apache.axis.SimpleChain.invoke(SimpleChain.java:83)
at org.apache.axis.client.AxisClient.invoke(AxisClient.java:165)
at org.apache.axis.client.Call.invokeEngine(Call.java:2784)
at org.apache.axis.client.Call.invoke(Call.java:2767)
at org.apache.axis.client.Call.invoke(Call.java:2443)
at org.apache.axis.client.Call.invoke(Call.java:2366)
at org.apache.axis.client.Call.invoke(Call.java:1812)
at com.ebay.webservices.soap.EBayAPISoapBindingStub.getSearchResults(EBayAPISoapBindingStub.java:8599)
at cs.apps.webservices.clients.EbayBookSearch.main(EbayBookSearch.java:60)

Ich habe mittlerweile auch schon versucht, mit Code-Samples von der eBay Developer Site (also Code der richtig sein sollte) die eBay-SOAP API aufzurufen. Das Ergebnis ist immer das gleiche: (400)Bad Request

Wird langsam nervig...

Bobby
nach oben
Sortierung ndern:  
Anfang   zurück   weiter   Ende
Seite 1 von 1
Gehe zu:   
Search

powered by carookee.com - eigenes profi-forum kostenlos

Layout © subBlue design