Hi,
I have a component that generates some XML data. Works fine. Now I need to upload that XML data via a POST to some remote server. How would I do that? Here is the code I use, but somehow the remote server chokes with the contents I send it. When I let the frameworks return the XML to my browser everything looks good. I suspect that my packaging the XML into a request somehow corrupts it. Or maybe there are some headers missing.
This is a direct action that returns what I want: try { Product product = (Product)products.objectAtIndex( 0 ); // Product is an EO TransferXMLGenerator generator = (TransferXMLGenerator)pageWithName( TransferXMLGenerator.class); generator.setProduct( product );
} catch (Exception e) { System.out.println(e.getMessage()); }
return generator;
And this is the code that generates the XML and then directly uploads it to the remote host:
TransferXMLGenerator generator = (TransferXMLGenerator)pageWithName( TransferXMLGenerator.class); generator.setProduct( product ); WOResponse generatorResponse = generator.generateResponse(); NSData xml = generatorResponse.content(); // *** I assume that XML now is the very same as is returned to the browser in the case of the direct action above // *** This assumption might be wrong // send XML data to front end Application application = (Application)Application.application(); WORequest request = new WORequest("POST", application.mondPath(), "HTTP/1.0", null, xml, null); BASE64Encoder enc = new BASE64Encoder(); String authHeaderContent = "Basic " + enc.encode((mondUser +":" + mondPasswd).getBytes()); request.setHeader( authHeaderContent, "Authorization" ); request.setHeader(application.mondHost(), "host"); request.setHeader("Java/1.6", "user-agent");
WOHTTPConnection connection = new WOHTTPConnection(application.mondHost(), application.mondPort()); messages.append( "\nConnection = " + connection.toString());
if (connection.sendRequest( request )) { WOResponse frontendResponse = connection.readResponse();
The problem is that when I send the direct action generated XML by hand, outside of my app, with the help of an upload tool (custom tool, not under my control, no source available), the remote server is happy, whereas when I send it via the second part above, directly from my app, the remote server accepts my data but then complains that there are some structural problems with the data. So, the communication works, but obviously the data sent differs in those two cases.
Any idea? Is WOHTTPConnection and WORequest the right thing to use here? Am I using it right?
Thanks for any help. ---markus---
|