OK, I still doubt some of your code lines.

1. When you do 
        out.println( "cmd=" + URLEncoder.encode( xml ) );
it is not getting exactly URL-encoded becaouse of the newline symbol
added by "println".

2. Your client sends HTTP request but there is no line in code to get
InputStream back.
That's obviously not a correct way to deal with HTTP socket and it's on
web server's (orion's here) developer mercy how to react. For instance
if there is no input socket open in certain time interval they can
simply ignore your POST request

Milton S wrote:
> 
> Thank you for your suggestion.
> 
> I just tried it but it doesn't perform a connection either. The only difference
> between what Hunter is doing in his code and mine is he is using a
> DataOutputStream and I am using a PrintWriter which shouldn't make any
> difference. He is also using the URLEncoder.encode method for both the name and
> value. All the URLEncoder.encode method does is scan the string for reserved and
> unsafe characters and replaces them with their URL encodings. This is equivalent
> to my line:
> out.println( "cmd=" + URLEncoder.encode( xml ) );
> I don't bother to encode "cmd because it doesn't have any reserved or unsafe
> characters in it. It is producing the same string value as Hunter's
> "toEncodedString()" method.
> 
> I am beginning to think I don't have Orion configured properly or my application
> deployed properly because all the code examples I see all have the same structure
> and others seem to be able to make them work.
> 
> Thank you for taking the time to look at my problem.
> 
> Milton S.
> 
> Boris Erukhimov wrote:
> 
> > It looks like you are not properly supplying arguments for "POST" method
> > The right order based on Jason Hunter book example is below:
> > To use it in your case just put your xml string into Properties object
> > as a value against "cmd" as a name
> >
> >  public static final InputStream sendPostMessage(Properties args, URL
> > destination)
> >                 throws IOException
> >   {
> >     String argString = "";
> >     if (args != null)
> >         {
> >         argString = toEncodedString(args);
> >         }
> >
> >     URLConnection con = destination.openConnection();
> >
> >     // Prepare for both input and output
> >     con.setDoInput(true);
> >     con.setDoOutput(true);
> >
> >     // Turn off caching
> >     con.setUseCaches(false);
> >
> >     // Work around a Netscape bug
> >     con.setRequestProperty("Content-Type",
> > "application/x-www-form-urlencoded");
> >
> >     // Write the arguments as post data
> >     DataOutputStream out = new DataOutputStream(con.getOutputStream());
> >
> >     out.writeBytes(argString);
> >     out.flush();
> >     out.close();
> >
> >     return (con.getInputStream());
> >   }
> > /////////////////sendPostMessage
> >
> >  private static final String toEncodedString(Properties args)
> >   {
> >     StringBuffer buf = new StringBuffer();
> >     Enumeration names = args.propertyNames();
> >     while (names.hasMoreElements())
> >         {
> >         String name = (String) names.nextElement();
> >         String value = args.getProperty(name);
> >         buf.append(URLEncoder.encode(name) + "=" + URLEncoder.encode(value));
> >         if (names.hasMoreElements())
> >                 buf.append("&");
> >         }
> >     return buf.toString();
> >   }
> > ////////////////////toEncodedString
> >
> > Hope it helps
> > ~boris
> >
> > Milton S wrote:
> > >
> > > Orion Interest Group,
> > >
> > > I have written a Java class to test server to server communication for a
> > > servlet running on Orion 1.5.2. Nothing seems to happen when I run the
> > > class while the same URL sent from the address/location edit box on a
> > > browser works perfectly. The host URL I am using is
> > > "http://ducati:8080/petroweb/report"; where ducati is the name of my
> > > notebook, petroweb is the application name, and report is the servlet I
> > > am trying to access. Following is the code I am using to make the
> > > "POST". What should I look for to make this work?
> > >
> > > I have "System.out.println's" in my servlet code to notify the open
> > > command prompt, in which Orion is running, of any requests received. I
> > > also have, in my servlet, all "GET" requests resolving to the "doPost"
> > > method.
> > >
> > > My environment is Intel P850, MS Windows 2000 Professional. Sun jdks,
> > > Orion 1.5.2 (stable binaries).
> > >
> > > Thank you for your help.
> > >
> > > import java.io.*;
> > > import java.net.*;
> > > import java.util.*;
> > >
> > > public class PostTest {
> > >
> > >   public static void main( String args[] ){
> > >     String xml = "<?xml version=\"1.0\" encoding=\"utf-8\"?>" +
> > >                  "<pwCmdXML>" +
> > >                  "<Command>SubmitJob</Command>" +
> > >                  "<CommandPassword>aPwd</CommandPassword>" +
> > >                  "<ProjectName>TheProject</ProjectName>" +
> > >                  "<ProjectType>pType</ProjectType>" +
> > >                  "<ObjectClass>stuff</ObjectClass>" +
> > >                  "<ObjectList>1,2,3,4,5,6,7,8,9,10,11,12,13,14,15," +
> > >                  "16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31," +
> > >                  "32,33,34,35,36</ObjectList>" +
> > >                  "</pwCmdXML>";
> > >
> > >     try{
> > >       URL url = new URL( "http://ducati:8080/petroweb/report?"; );
> > >       HttpURLConnection conn = (HttpURLConnection)url.openConnection();
> > >
> > >       conn.setDoOutput( true );
> > >       conn.setRequestMethod( "POST" );
> > >       PrintWriter out = new PrintWriter(conn.getOutputStream() );
> > >
> > >       out.println( "cmd=" + URLEncoder.encode( xml ) );
> > >       conn.connect();
> > >       out.flush();
> > >       out.close();
> > >     }
> > >     catch( MalformedURLException err ){
> > >       System.out.println( "MalformedURLException = " + err.getMessage()
> > > );
> > >     }
> > >     catch( IOException err ){
> > >       System.out.println( "IOException = " + err.getMessage() );
> > >     }
> > >   }
> > > }

Reply via email to