apache httpClient Problem.

Goldfish

Bekanntes Mitglied
Hi, wir schreiben gerade eine android app und ich soll den Upload von Dateien übernehmen. Ich hab soweit eigentlich alles ganz gut hinbekommen, nur gibt es ein ernstes Problem, das ich nicht in den Griff bekomme.
Also, ich sende ein einfaches Post-Request mit "http://server:port/Files/upload" an den Server. diese Anfrage klappt hervorragend. Aber wenn ich die URL auch nur im kleinsten verändere wie bspw. "http://server:port/Files/uploaded" dann löst der Server den Post-Body nicht mehr auf und findet die hochgeladene Datei nicht... ich kann mir das nicht erklären.
Ich zeige hier mal den Beispielcode, den ich dafür verwendet habe.

ich nuze für das ganze folgende Abhängigkeiten:
[XML]
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpcore</artifactId>
<version>4.3.2</version>
</dependency>

<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpmime</artifactId>
<version>4.3.2</version>
</dependency>

<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>4.3.2</version>
</dependency>
[/XML]

Client

Java:
public static void main( String[] args ) throws URISyntaxException, IOException, HttpException {
        String uploadURL = "/Files/upload";
        File uploadFile = new File("C:\\Users\\Pascal\\Dropbox\\Bilder\\lulz\\00030dxt.jpg");
        HttpUploadClient httpUploadClient = new HttpUploadClient();
        httpUploadClient.uploadFile( uploadURL, uploadFile );
    }

    private static final String UTF_8_ENCODING = "UTF-8";

    private static final int connectionTimeoutMillis = 20000;
    private static final int socketTimeoutMillis = 20000;

    private void uploadFile(String uploadURL, File uploadFile) throws IOException, HttpException, URISyntaxException {
        MultipartEntityBuilder multipartEntityBuilder = MultipartEntityBuilder.create();
        multipartEntityBuilder.setMode( HttpMultipartMode.BROWSER_COMPATIBLE );
        multipartEntityBuilder.addPart( "file", new FileBody( uploadFile ) );
//        MultipartEntity multipartEntity = new MultipartEntity(  );
//        multipartEntity.addPart( "file", new FileBody( uploadFile ) );
        HttpResponse response;
        response = sendPOST( uploadURL, multipartEntityBuilder.build() );
        // TODO remove sysout line when it is not needed anymore
        System.out.println("result: " + EntityUtils.toString(response.getEntity(), UTF_8_ENCODING));
        return;
    }


    public static HttpResponse sendPOST(String targetURL, HttpEntity entity) throws IOException, URISyntaxException, HttpException {
        HttpClient httpClient = getHttpClient();
        HttpHost target = new HttpHost("localhost", 8888, "http");
        HttpHost proxy = new HttpHost("localhost", 8900, "http"); // für visual proxy um die Anfrage anzsuehen
        RequestConfig config = RequestConfig.custom()
                .setProxy(proxy)
                .build();
        HttpPost httppost = new HttpPost( targetURL );
        httppost.setConfig( config );
        httppost.setEntity( entity );

        System.out.println( "Executing request " + httppost.getRequestLine() + " to " + target + " via " + proxy );

        HttpResponse response = httpClient.execute(target, httppost);

//        HttpParams httpParams = httpClient.getParams();
//        HttpConnectionParams.setConnectionTimeout( httpParams, connectionTimeoutMillis );
//        HttpConnectionParams.setSoTimeout(httpParams, socketTimeoutMillis);
        String result = "";
        if (response != null && response.getEntity() != null) {
            result = EntityUtils.toString( response.getEntity(), UTF_8_ENCODING );
        }

        System.out.println(result);

        return response;
    }


    private static Object mLock = new Object();
    public static CookieStore mCookie = null;
    public static HttpClient getHttpClient() {
        final CloseableHttpClient httpClient = HttpClients.createDefault();
        return httpClient;
    }


Server
Hier zeige ich eben nur das Servlet, das sollte reichen.

Java:
@SuppressWarnings("serial")
public class DispatchServlet extends HttpServlet {

	@Override
	protected void service(HttpServletRequest request,
			               HttpServletResponse response) throws IOException {
		System.out.println("******************************************");
		System.out.println(request.getParameterMap().keySet());
		System.out.println("******************************************");
	}
}


Wenn ich die Anfrage an den Server mit "/Files/upload" sende, bekomme ich folgende Ausgabe
******************************************
[file.org.eclipse.jetty.servlet.contentType, file]
******************************************


Wenn ich die Anfrage an den Server mit "/Files/uploaded" sende (oder auch irgendwas beliebiges anderes), bekomme ich folgende Ausgabe

******************************************
[]
******************************************

kann mir das vielleicht jemand erklären? ich hab echt keine Ahnung mehr, was ich noch machen kann...
 

Goldfish

Bekanntes Mitglied
ich verwende embedded Jetty udn die config ist über Code zusammen gebastelt. Die web.xml haben wir entsprechend nicht verwendet.
Aber wieso macht er sowas überhaupt? Wenn ich eine Post-Anfrage sende, mit einer Datei im Body, dann soll er die doch einfach mit übergeben. Was ist das für ein Verhalten? ich kannd as leider nicht nachvollziehen...

Unsere Config läuft wie folgt:

Java:
public static void main(String[] args) throws Exception {

        WebAppContext root = new WebAppContext();
        configureWebAppContext(root);

	Server server = new Server();
	ArrayList<Connector> connectors = new ArrayList<>();
        createAndConfigureConnectorsAndAddThemToList(server, connectors);

        HandlerCollection handlerCollection = new HandlerCollection();
        handlerCollection.addHandler(root);
        server.setHandler(handlerCollection);
	// Start the server
	server.start();
	server.join();
}

private static void createAndConfigureConnectorsAndAddThemToList(Server server, ArrayList<Connector> connectors) {
        // connector for normal HTTP-connection
        ServerConnector sslConnector = new ServerConnector(server);
        sslConnector.setPort(HTTP_PORT); // Please don't change the port! 8888
        server.addConnector(sslConnector);
}

private static void configureWebAppContext(WebAppContext context) {
        context.setContextPath("/");
        String resourceBase = System.getProperty("user.home") + File.separator
                + ServerConstants.PROJECT_FOLDERNAME + File.separator;
        context.setResourceBase(resourceBase);
        context.setParentLoaderPriority(true);

        // Configure web application
        ServletHolder servlet = new ServletHolder();
        servlet.setName("StaticContent");
        servlet.setClassName("org.eclipse.jetty.servlet.DefaultServlet");
        context.addServlet(servlet, "/static/*");

        servlet = new ServletHolder();
        servlet.setName("apidocs");
        servlet.setClassName("org.eclipse.jetty.servlet.DefaultServlet");
        context.addServlet(servlet, "/apidocs/*");

        servlet = new ServletHolder(new DispatchServlet());
        context.addServlet(servlet, "/*");

        // servlet = new ServletHolder(new DispatchServlet());
        // root.addServlet(servlet, "/Acra/*");

        // For all filters
        /* The following filters are normally used when the developer tries to
         * avoid using the web.xml file.
         */
        EnumSet<DispatcherType> dispatcherType = EnumSet.of(
                DispatcherType.REQUEST, DispatcherType.FORWARD,
                DispatcherType.ASYNC);

        // Configure filters
        FilterHolder filter = new FilterHolder();
        filter.setName("FileUploadFilter");
        filter.setClassName("org.eclipse.jetty.servlets.MultiPartFilter");
        filter.setInitParameter("deleteFiles", "true");
        context.addFilter(filter, "/Files/upload", dispatcherType);

        filter = new FilterHolder();
        filter.setName("GzipFilter");
        filter.setClassName("org.eclipse.jetty.servlets.GzipFilter");
        filter.setInitParameter("mimeTypes", "text/html," + "text/plain,"
                + "text/xml," + "application/xhtml+xml," + "text/css,"
                + "application/javascript," + "application/json,"
                + "image/svg+xml");
        context.addFilter(filter, "/*", dispatcherType);

        filter = new FilterHolder();
        filter.setName("CrossOriginFilter");
        filter.setClassName("org.eclipse.jetty.servlets.CrossOriginFilter");
        filter.setInitParameter("allowedMethods", "GET," + "POST," + "PUT,"
                + "DELETE," + "OPTIONS");
        context.addFilter(filter, "/*", dispatcherType);
 }


das ist so ziemlich alles zu unserer Config.
 

turtle

Top Contributor
Ich kenne mich mit jetty nicht aus, bin aber ganz gut mit Tomcat unterwegs und habe damit mehrere Cluster in Betrieb genommen.

Daher kann ich jetzt "nur" raten, aber folgende Zeile kommt mir "verdächtig" vor:
Code:
/Files/upload
Das würde ich mal zum Test auf Files/uploaded ändern
 

Goldfish

Bekanntes Mitglied
oh mein Gott, wie konnte ich das übersehen`?
Der Code ist nicht von mir... aber ich hab etwa 30 mal rübergelesen und hab das nicht gepeilt XD
Danke, würde vor dir auf die Knie fallen, wenn das nicht zu peinlich wäre ^^
Sauber, jetzt kann ich endlich weiter arbeiten. Echt vielen Dank!!! ^^
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
D HTTP Apache-HttpClient/UNAVAILABLE (java 1.4) Netzwerkprogrammierung 18
M Apache HTTPClient Server log ausgeben ?! Netzwerkprogrammierung 3
N HTTP Apache 4.2.1 HttpClient 302 nach Login und auf den weiteren Seiten. Netzwerkprogrammierung 5
R Apache HttpClient File Download? Netzwerkprogrammierung 3
M need org.apache.commons.httpclient.* Netzwerkprogrammierung 8
K Login via apache httpclient Netzwerkprogrammierung 4
T HTTP Apache Commons HttpClient Bibliothek Netzwerkprogrammierung 2
lordcarlos HTTP Apache HttpClient, post und login. Netzwerkprogrammierung 2
T Apache HttpClient & Default Headers Netzwerkprogrammierung 9
T apache HTTPClient einloggen Netzwerkprogrammierung 2
Q HTTPS mit Apache HttpClient Netzwerkprogrammierung 4
C HTTPS mit Apache HTTPClient Netzwerkprogrammierung 1
M org.apache.commons.httpclient.HttpClient Netzwerkprogrammierung 3
Nuiton FTP Apache Commons: FTPClient und Sicherheit Netzwerkprogrammierung 9
N FTP FTP Client invalid IPv6 address (Apache Commons Net API) Netzwerkprogrammierung 6
D Apache Mina Serial: Error Netzwerkprogrammierung 2
0 Apache Commons File Object bekommen Netzwerkprogrammierung 4
W HTTP Apache HttpComponents und GZIP Netzwerkprogrammierung 2
F Apache commons net SFTPClient Netzwerkprogrammierung 5
D Apache CXF, JAX-WS Problem bei Arrays - einfacher Server Netzwerkprogrammierung 2
M Apache Solr doc & pdf Upload Netzwerkprogrammierung 8
C apache commons net ftp bei upload unvollständig Netzwerkprogrammierung 3
R HTTP Apache HTTP Client: Request mit angehängter Datei Netzwerkprogrammierung 2
R Apache Mina - Hilfestellung Netzwerkprogrammierung 32
D Apache Mina und GWT Servlet Netzwerkprogrammierung 4
N SFTP apache keine Verbindungaufbau möglich Netzwerkprogrammierung 6
dayaftereh Fragen zu Apache Mina? Netzwerkprogrammierung 5
Kr0e Apache Mina -> await() Netzwerkprogrammierung 30
B Tomcat Apache Server Netzwerkprogrammierung 6
J org.apache.http.auth.NTCredentials Netzwerkprogrammierung 2
A org.apache.commons http client in Netbeans einbinden Netzwerkprogrammierung 3
Kr0e Apache Mina Problem Netzwerkprogrammierung 2
G apache von außen zugänglich machen Netzwerkprogrammierung 5
1 Upload problem! org.apache.commons.net.ftp Netzwerkprogrammierung 3
S Google Search Webservice mit Apache Axis realisieren? Netzwerkprogrammierung 2
I Apache http-client: Problem beim Proxyaufruf Netzwerkprogrammierung 2
S Applet und JWS auf Apache-Axis (SOAP) Netzwerkprogrammierung 8
J Antwort eines Soaprequests parsen mittels org.apache.soap Netzwerkprogrammierung 2
B Via Java Datei zu PHP-Script auf Apache hochladen Netzwerkprogrammierung 4
A http request per socket an apache server Netzwerkprogrammierung 5
B HttpClient - Server (Jetty) - getInputStream - EOF Netzwerkprogrammierung 3
B HttpClient Netzwerkprogrammierung 2
M HTTP HTTPClient Authentication - Quickr Server Netzwerkprogrammierung 8
H Java 1.4 HTTPClient Content von PutMethod Netzwerkprogrammierung 4
P HttpClient - Daten einer Website "unvollständig" Netzwerkprogrammierung 5
M Dateiupload mittels HttpClient Netzwerkprogrammierung 3
F FileUpload mit commons HttpClient Netzwerkprogrammierung 17
H HTTP Login mit POSTMethod und httpClient Netzwerkprogrammierung 5
B HTTP Probleme mit HttpClient? Netzwerkprogrammierung 2
H Bilder mit HttpClient hochladen Netzwerkprogrammierung 3
T HttpClient - Senden via Post Netzwerkprogrammierung 12
M httpclient kann sich nicht auf asp.net Seite anmelden Netzwerkprogrammierung 2
M Seltsame Fehlermeldung (httpclient) Netzwerkprogrammierung 6
A Jakarta Commons HTTPClient: Mehrere Requests gleichzeitig Netzwerkprogrammierung 2
E HttpClient und return Problem Netzwerkprogrammierung 6
K Bad Request nach Form Login in Jakarta HttpClient Netzwerkprogrammierung 4
J Jakarta HTTPClient Netzwerkprogrammierung 5
D Problem beim holen einer PHP-Seite via HttpClient Netzwerkprogrammierung 19
S mit HttpClient Seiteninhalt lesen Netzwerkprogrammierung 8
P jakarta.HttpClient: Port bei GetMethod angeben Netzwerkprogrammierung 3
I Socket Problem mit den WebSocket Antworten der Discord API Netzwerkprogrammierung 0
K Java Websocketserver Problem | Android to Pi Netzwerkprogrammierung 1
C RMI Produzent-Verbraucher-Problem - Code review Netzwerkprogrammierung 12
B Socket Bilder verschicken via Sockets. Heap-Problem. Netzwerkprogrammierung 2
S Problem bei dem Bluetoothverbindungsaufbau Netzwerkprogrammierung 2
G Server-Client IO Problem Netzwerkprogrammierung 6
M Netty - TCP Problem Netzwerkprogrammierung 4
L Socket Problem mit Server Netzwerkprogrammierung 1
J Chat Server starten über GUI problem Netzwerkprogrammierung 4
M Problem bei Socket (MultiplayerSpiel) Netzwerkprogrammierung 4
M Socket CDI, Websocket reference Problem ! Netzwerkprogrammierung 2
Shams Problem mit Eventbus in Verbindung mit Server Netzwerkprogrammierung 0
H Problem mit ObjectStreams Netzwerkprogrammierung 3
A Problem beim Senden von Client zu Server Netzwerkprogrammierung 10
D Socket BufferedWriter/Reader Problem Netzwerkprogrammierung 1
Maxim6394 Problem mit Socks5 Implementierung Netzwerkprogrammierung 0
C Handle Connection Problem Netzwerkprogrammierung 3
E HttpUrlConnection Cookie Problem Netzwerkprogrammierung 0
X Problem mit vielen Bytes über Socket Netzwerkprogrammierung 23
O 4Gewinnt Multiplayer - Netzwerk Problem (TCP) Netzwerkprogrammierung 1
A Socket Socket-Problem - Object wird nicht übertragen Netzwerkprogrammierung 3
R Problem beim Programmieren eines Chatprogramms Netzwerkprogrammierung 5
E einfaches Problem: Session-Handling bei Servlets Netzwerkprogrammierung 5
G Problem mit einem FileWatcher Netzwerkprogrammierung 7
T Socket Server starten Thread Problem Netzwerkprogrammierung 12
B Client/Server Connection Problem Netzwerkprogrammierung 2
G Problem mit STATIC-Verständnis Netzwerkprogrammierung 8
S Umstellung AS400 auf Postgre - Problem beim Arbeiten mit Metadaten Netzwerkprogrammierung 2
J Facelets Include Rendered Problem Netzwerkprogrammierung 2
J Socket Problem mit C++/Java Netzwerkprogrammierung 20
P Problem mit Datagram-Sockets Netzwerkprogrammierung 2
G Socket NIO2 Problem mit AsynchronousSocketChannel beim Schließen Netzwerkprogrammierung 3
G Cookie Verwaltungs Problem nach Login auf InetSeite (Wo utma-Cookie?) Netzwerkprogrammierung 18
C Socket Problem mit ObjectInput/OutputSream Netzwerkprogrammierung 7
B Socket Problem mit Netzwerkchat Netzwerkprogrammierung 21
D RMI Problem beim shutdown von verteilter CORBA-Anwendung Netzwerkprogrammierung 6
Maxim6394 ipv6 Problem Netzwerkprogrammierung 2
Maxim6394 Proxyserver Performance Problem Netzwerkprogrammierung 11
M Problem Client - Server Sockets: .ready() wird nie true! Netzwerkprogrammierung 6
C Socket Problem mit ObjectInput/OutputSream Netzwerkprogrammierung 5

Ähnliche Java Themen

Neue Themen


Oben