Hi Rick- take a look at explanation of HTTP 302 return code http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html The method used for transmitting the request makes the difference on whether or not you are able to redirect to location field returned with the 302..in other words POST cannot redirect..but GET and HEAD can redirect Also since the redirect might be altered the client must continue to use the original URI
as a quick test I would try to determine if you have any proxies, firewalls or NAT servers changing the url, port or webapp between you and the webservice The admin of the webservice is obligated to provide you with the following information a)The web service site (address or CNAME) must exist and be reachable b)The web service admin must provide a wsdl from the published service c)Use the provided wsdl to establish your own client stubs to transmit request to the waiting Service If any of these items fails recode it in a working webservice environment such as Axis and use that... Anyone else? Martin-- ----- Original Message ----- Wrom: RZFSQHYUCDDJBLVLMHAALPTCXLYRWTQTI To: <[email protected]> Sent: Friday, November 30, 2007 1:20 PM Subject: Re: HTML Status Code 302 And Exception When Contacting IIS Service > I don't think there are any spaces in any of the names involved. (I put > a few underscores in the changed names below.) I can see exactly where > the exception is ocurring - it's in HTTPSender.readFromSocket(), where > it detects the 302 status, closes the socket, clears the status code, > and sends it off to invoke() where it tries to construct a new URL based > on the 'location' field. Unfortunately, I seem to be getting an > incomplete spec for a URL in 'location' - it's missing the protocol and > the hostname. > > (Emphasis here on the fact that I can talk with my own services just fine.) > > Would there be anything else I have to do if they are trying to send me > back a url rather than plain text or xml? > > Martin Gainty wrote: > > Hi Rick- > > > > most DNS servers wont do lookups on DNS CNAMEs for ServerName With Spaces > > > > but rather CNAMEs without spaces such as > > private static String URL = > > "http://127.0.0.1:8080/axis2/services/AddressBookService"; > > > > Call.java throws MalformedURLException when the EPR (URL) is malformed > > > > M-- > > ----- Original Message ----- > > Wrom: PWIGYOKSTTZRCLBDXRQBGJSNBOHMKHJYF > > To: <[email protected]> > > Sent: Friday, November 30, 2007 6:14 AM > > Subject: Re: HTML Status Code 302 And Exception When Contacting IIS Service > > > > > > > >> Hi Martin, > >> > >> Thanks. I added the following to my own code while configuring the call: > >> > >> call.setProperty(MessageContext.HTTP_TRANSPORT_VERSION, > >> HTTPConstants.HEADER_PROTOCOL_V11); > >> Hashtable chunkedTable = new Hashtable(); > >> chunkedTable.put(HTTPConstants.HEADER_TRANSFER_ENCODING, > >> HTTPConstants.HEADER_TRANSFER_ENCODING_CHUNKED); > >> call.setProperty(HTTPConstants.REQUEST_HEADERS, chunkedTable); > >> > >> Now I get similar results, but with one additional go-round. In > >> HTTPSender.readFromSocket, the first iteration gives me a 100 > >> (continue), then when I do so, I get the 302 again, then the > >> MalformedURLException. > >> > >> I should probably mention that this is Axis 1.4, Java 1.5 (OS X) > >> > >> Rick > >> > >> Martin Gainty wrote: > >> > >>> Hi Rick- > >>> 1st make sure you are enabling HTTP 1.1 protocol and chunkedEncoding > >>> transfer-encoding as in this example from /conf/axis2.xml > >>> > >>> <transportSender name="http" > >>> > >>> class="org.apache.axis2.transport.http.CommonsHTTPTransportSender"> > >>> <parameter name="PROTOCOL">HTTP/1.1</parameter> > >>> <parameter name="Transfer-Encoding">chunked</parameter> > >>> > >>> <!-- If following is set to 'true', optional action part of the > >>> Content-Type will not be added to the SOAP 1.2 messages --> > >>> <!-- <parameter name="OmitSOAP12Action">true</parameter> --> > >>> </transportSender> > >>> > >>> Martin- > >>> ----- Original Message ----- > >>> Wrom: MYXOEAIJJPHSCRTNHGSWZIDREXCAXZOWC > >>> To: "AXIS User Mail List" <[email protected]> > >>> Sent: Thursday, November 29, 2007 8:35 PM > >>> Subject: HTML Status Code 302 And Exception When Contacting IIS Service > >>> > >>> > >>> > >>> > >>>> Greetings, > >>>> > >>>> I'm new to this area of programming, so please bear with me if this is > >>>> something so simple a 5-year-old should be able to deal with. (In the > >>>> following code I've changed some names for the sake of confidentiality, > >>>> so the URLs will not actually work.) > >>>> > >>>> I've written a very simple Axis client in Java, to contact a service on > >>>> a remote IIS machine. I'm passing a String and expecting an > >>>> acknowledgment back. I have written my own test service, running in > >>>> Tomcat on my own server, and it works fine. When trying to connect to > >>>> the IIS machine, my client chokes with various errors depending on the > >>>> spellings/misspellings of the endpoint URL. Most common is > >>>> MalformedURLException: no protocol. My code: > >>>> > >>>> public void contact() { > >>>> try { > >>>> Service service = new Service(); > >>>> Call call = (Call) service.createCall(); > >>>> URL url = new > >>>> URL("http://remote_machine.us:80/product_name/login/Connect.aspx"); > >>>> call.setTargetEndpointAddress(url); > >>>> call.setOperationName(new QName("Connect.aspx", > >>>> > > "service_name")); > > > >>>> SOAPEnvelope se = new SOAPEnvelope(); > >>>> Object[] paramValue = new Object[] { "hello from Rick" }; > >>>> RPCElement rpce = new RPCElement("http://remote_machine.us", > >>>> service_name, paramValue); > >>>> se.addBodyElement(rpce); > >>>> Object returnValue = (Object) call.invoke(se); > >>>> System.out.println(returnValue.toString); > >>>> } > >>>> catch (ServiceException se) { > >>>> se.printStackTrace(); > >>>> } > >>>> catch (MalformedURLException mue) { > >>>> mue.printStackTrace(); > >>>> } > >>>> catch (RemoteException re) { > >>>> re.printStackTrace(); > >>>> } > >>>> } > >>>> > >>>> I have walked through the Axis source code trying to find a reason for > >>>> this. Call.invoke() sends me to HTTPSender.invoke(): > >>>> > >>>> targetURL = new URL(msgContext.getStrProp(MessageContext.TRANS_URL)); > >>>> // targetURL is OK > >>>> String host = targetURL.getHost(); > >>>> // host is the domain name minus the protocol, ie: remote_machine.us, I > >>>> presume this is OK > >>>> int port = targetURL.getPort(); > >>>> // port is 80 > >>>> > >>>> // Send the SOAP request to the server > >>>> InputStream inp = writeToSocket(socketHolder, msgContext, targetURL, > >>>> otherHeaders, host, port, msgContext.getTimeout(), > >>>> > >>>> > >>> useFullURL); > >>> > >>> > >>>> // Read the response back from the server > >>>> Hashtable headers = new Hashtable(); > >>>> inp = readHeadersFromSocket(socketHolder, msgContext, inp, headers); > >>>> > >>>> // the returned headers look plausible to me: {connection= close, date= > >>>> Thu, 29 Nov 2007 15:06:32 GMT, server= Microsoft-IIS/6.0, > >>>> content-length= 199, x-powered-by= ASP.NET, cache-control= private, > >>>> x-aspnet-version= 1.1.4322, microsoftofficewebserver= 5.0_Pub, > >>>> > > location= > > > >>>> > > /product_name/login/Connect.aspx?ReturnUrl=%2fproduct_name%2flogin%2fConnect > > > >>> aspx, > >>> > >>> > >>>> content-type= text/html; charset=utf-8} > >>>> readFromSocket(socketHolder, msgContext, inp, headers); > >>>> > >>>> The fun begins in HTTPSender.readFromSocket: > >>>> > >>>> Integer rc = > >>>> (Integer)msgContext.getProperty(HTTPConstants.MC_HTTP_STATUS_CODE); > >>>> // rc = 302 (moved/redirect) > >>>> > >>>> If rc == 302, readFromSocket() closes the connection and tries to > >>>> construct a new URL (and a new connection): > >>>> > >>>> // Temporary Redirect (HTTP: 302/307) > >>>> // close old connection > >>>> inp.close(); > >>>> socketHolder.getSocket().close(); > >>>> // remove former result and set new target url > >>>> msgContext.removeProperty(HTTPConstants.MC_HTTP_STATUS_CODE); > >>>> msgContext.setProperty(MessageContext.TRANS_URL, location); > >>>> // next try > >>>> invoke(msgContext); > >>>> > >>>> In HTTPSender.invoke(): > >>>> > >>>> try { > >>>> BooleanHolder useFullURL = new BooleanHolder(false); > >>>> StringBuffer otherHeaders = new StringBuffer(); > >>>> > >>>> // The following line raises a MalformedURLException, since the > >>>> string it is getting from msgContext is not a complete specification > >>>> > > for > > > >>>> a URL: > >>>> > >>>> > >>>> > > "/product_name/login/Connect.aspx?ReturnUrl=%2fproduct_name%2flogin%2fConnec > > > >>> t.aspx": > >>> > >>> > >>>> targetURL = new > >>>> > > URL(msgContext.getStrProp(MessageContext.TRANS_URL)); > > > >>>> . > >>>> . > >>>> } > >>>> > >>>> When I point a browser at the original URL I am redirected to this > >>>> > > page: > > > >>>> > > "http://remote_machine.us:80/product_name/login/LoginDisplay.aspx/product_na > > > >>> me/login/Connect.aspx?ReturnUrl=%2fproduct_name%2flogin%2fConnect.aspx" > >>> > >>> > >>>> Questions: > >>>> * Is there any way for me to handle this effectively in code? What am I > >>>> doing wrong? > >>>> * This is supposed to end up as an automated process; does it make > >>>> > > sense > > > >>>> for it to blindly follow a redirect without knowing where it's going? > >>>> Seems risky to me. > >>>> * Is the 302 a meaningful error code, or could it be masking something > >>>> else? > >>>> > >>>> Any suggestions most welcome! > >>>> > >>>> Rick Strong > >>>> > >>>> > >>>> > >>>> > >>>> --------------------------------------------------------------------- > >>>> To unsubscribe, e-mail: [EMAIL PROTECTED] > >>>> For additional commands, e-mail: [EMAIL PROTECTED] > >>>> > >>>> > >>>> > >>>> > >>> --------------------------------------------------------------------- > >>> To unsubscribe, e-mail: [EMAIL PROTECTED] > >>> For additional commands, e-mail: [EMAIL PROTECTED] > >>> > >>> > >>> > >>> > >> --------------------------------------------------------------------- > >> To unsubscribe, e-mail: [EMAIL PROTECTED] > >> For additional commands, e-mail: [EMAIL PROTECTED] > >> > >> > >> > > > > > > --------------------------------------------------------------------- > > To unsubscribe, e-mail: [EMAIL PROTECTED] > > For additional commands, e-mail: [EMAIL PROTECTED] > > > > > > > > --------------------------------------------------------------------- > To unsubscribe, e-mail: [EMAIL PROTECTED] > For additional commands, e-mail: [EMAIL PROTECTED] > > --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
