Parse Expires HTTP Header

Hello,
I'm writing a HTTP-Proxyserver and I want to compare the cached Expires-Header with the actual date, so I need to convert the Header Object which I get from "httpclient" (jakarta) to a date Object. I tried the following:
/** Expires Header format. */
private final static DateFormat expiresFormat = new SimpleDateFormat("EEE, dd MMM yyyy HH:mm:ss 'GMT'");
/** Expires header as a date. */
private Date expires;
Header expires = method.getResponseHeader("Expires");
// Parse the expires header.
try
  this.expires = expiresFormat.parse(expires.toString());
catch (ParseException e)
  logger.fatal("Bad date format in header: "+expires);
  throw new IllegalArgumentException(
    "Bad date format in header: "+expires);
...I get an Exception "Exception in thread "Thread-1" java.lang.IllegalArgumentException: Bad date format in header: Expires: Wed, 01 Jan 2020 01:01:01 GMT and I really don't know why :-/
I've tried so many "formats", but hmm, nothing worked so far :-/
greetings,
Johannes

Yes, but oh well, it doesn't work. Now I even tried
/** Expires Header format. */
private final static DateFormat expiresFormat = new
SimpleDateFormat(
"'Wed, 01 Jan 2020 01:01:01 GMT'");
That is illogical.
SimpleDateFormat takes a pattern. That isn't a pattern.
Presumably you intend to escape the entire thing perhaps? But then what exactly is it supposed to be parsing then?
And there is at least one bug with escaping so there could be others.
My suggestion was to stop escaping everything by removing the elements that you were already escaping. That would leave you just with a regular pattern.

Similar Messages

  • HTTP response code 500 : Error during parsing of SOAP header

    Hi Experts,
    I have a MAIL to IDOC scenario.  An external third party emails invoices to our inbox - which we pick up and process the attachment.  All is well when I test the scenario internally, but when the third party emails it fails with (see ERROR MESSAGE below).
    When I look at the SOAP header of the failed message I see the values from the dump in this field:
      <sap:Record namespace="http://sap.com/xi/XI/System/Mail" name="SHeaderTHREAD-INDEX">AcarCeJmJKHuV6wZSxm2UMoUeAjS1gALPExABtze/PACiUJDcAGS0DCwAmOOELAJlOzP0AFiOo8gCK1pEZAF500SsAYW46lgBgX2bGALyieMQAXw2oKgBYXf0WAGeueD0AAAHnhwBamTSaAGIUE0kAYZSYTQBgY5OTADunN0gAE3t/sQAWScBXADTQvvEAD4yNhQATdkKiAFr7DBMAGIXTZQAP2xJFABZ0YfoAGHYAuAAKlaeaACJ9xtUAEjcvQAAV4L06ABZuwsAAK/f9vgAAF/GSAAAYmRYARIKwtQAV5R9SABMo5bsAGQQyvAAVqsjyABOh9uMAFXTa2QAWEjsfABaEvp4AFaL1NQAV5MnUABXiVbIAGc7LsQAYVN9SABLfYQIAEwF3nQAWSL2lABn5ZgIAEf/k8gAWeVgrAAJaSZIAAElM4gATZR0GA=</sap:Record>
    Can anyone tell me what SHeaderTHREAD-INDEX does?  Or what my problem is  (Our email is Outlook)
    ERROR MESSAGE.........
    SOAPFault received from Integration Server. ErrorCode/Category: XIProtocol/WRONG_VALUE; Params: SOAP:Envelope(1)SOAP:Header(1)sap:DynamicConfiguration(3)sap:Record(14), AcarCeJmJKHuV6wZSxm2UMoUeAjS1gALPExABtze/PACiUJDcAGS0DCwAmOOELAJlOzP0AFiOo8gCK1pEZAF500SsAYW46lgBgX2bGALyieMQAXw2oKgBYXf0WAGeueD0AAAHnhwBamTSaAGIUE0kAYZSYTQBgY5OTADunN0gAE3t/sQAWScBXADTQvvEAD4yNhQATdkKiAFr7DBMAGIXTZQAP2xJFABZ0YfoAGHYAuAAKlaeaACJ9xtUAEjcvQAAV4L06ABZuwsAAK/f9vgAAF/GSAAAYmRYARIKwtQAV5R9SABMo5bsAGQQyvAAVqsjyABOh9uMAFXTa2QAWEjsfABaEvp4AFaL1NQAV5MnUABXiVbIAGc7LsQAYVN9SABLfYQIAEwF3nQAWSL2lABn5ZgIAEf/k8gAWeVgrAAJaSZIAAElM4gATZR0GA=協彎䅍䔾ਉ़䥎噏䥃䕟乏㸸㌱ㄵㄹ㰯䥎噏䥃䕟乏㸊उ㱁䵏啎呟䕘䍌彖䅔㸷⸵〼⽁䵏啎呟䕘䍌彖䅔㸊उ㱃啒剅乃失㹅啒㰯䍕剒䕎䍙ㄾਉ़䅍何乔彖䅔㸱⸴㜼⽁ꯃ䅢坡汫, ST: ST_XM; AdditionalText: An error occurred when deserializing in the simple transformation program ST_XMS_MSGHDR30_DYNAMIC; ApplicationFaultMessage:  ; ErrorStack: XML tag SOAP:Envelope(1)SOAP:Header(1)sap:DynamicConfiguration(3)sap:Record(14) (or one of the attributes) has the incorrect value AcarCeJmJKHuV6wZSxm2UMoUeAjS1gALPExABtze/PACiUJDcAGS0DCwAmOOELAJlOzP0AFiOo8gCK1pEZAF500SsAYW46lgBgX2bGALyieMQAXw2oKgBYXf0WAGeueD0AAAHnhwBamTSaAGIUE0kAYZSYTQBgY5OTADunN0gAE3t/sQAWScBXADTQvvEAD4yNhQATdkKiAFr7DBMAGIXTZQAP2xJFABZ0YfoAGHYAuAAKlaeaACJ9xtUAEjcvQ An error occurred when deserializing in the simple transformation program ST_XMS_MSGHDR30_DYNAMIC Data loss occurred when converting AcarCeJmJKHuV6wZSxm2UMoUeAjS1gALPExABtze/PACiUJDcAGS0DCwAmOOELAJlOzP0AFiOo8gCK1p
    Transmitting the message to endpoint http://sdcxp1-ci.na.fmo.com:8000/sap/xi/engine?type=entry using connection AFW failed, due to: com.sap.aii.af.ra.ms.api.RecoverableException: Received HTTP response code 500 : Error during parsing of SOAP header.

    We work with Microsoft Outlook, but I'm sure this could work with any email system.
    This error only came from external emails - what we did in the end is to get the third party to email a particular email (email1) in our company.  This is set up as a regular email account.  On this email put a forward rule to email2 for a particular sender/subject.  email2 is set up as POP3 so that XD1 can poll it - we also block any emails except from email1.
    Doing this accomplishes a couple of things:
    1)  We get around the error because XI polls email2 (which has adapter settings of IMAP4 so we can see MAIL adapter attributes ie. sender, subject etc...When we originally had as POP3 we were not able to see these - but setting as IMAP4 causes the error for external emailers)
    2) We have a SPAM filter - the XI email is clean from SPAM and the adapter will not have errors, as it only receives valid emails to process
    3) We have a central email (email1) which is used to archive all XI emails - we use this for all email scenarios (as we also save to folder and forward in the rule)
    Hope this helps your situation.

  • HTTP-Header Expiration Date

    Hi There,
    Is there a way to influence the expiration date header for
    - The apex generated page itself (not that useful, if set to a long time)
    - For uploaded workspace/application files ? (really useful for large javascripts)
    I know, you can use 'ExpiresDefault "access plus 1 month"
    in .htaccess files for directories n Apaches webroot.
    But can I use such things with APEX ?
    I'm using now the shared hosting, so I haven't got access to the Apache settings
    / OIAS settings.
    Thanks in advance,
    Art

    Web Server doesn't have a direct equivalent for mod_expires. It's possible to emulate it in Web Server 7.0, but the configuration is more verbose. You'll need to manually edit the obj.conf configuration file(s). Here's an example:
    Output type="image/gif" fn="set-variable" $srvhdrs{'expires'}="$(httpdate($time + 1800))"You can place the above directive immediately below the <Object name="default"> line.

  • How to deal with the "Set-Cookie" field in HTTP header??

    I follow the RFC-2616 specification to write a socket program to fetch web pages.
    I have to deal with all the fields included in the HTTP header.
    But the RFC-2616 doesn't talk anything about the "Set-Cookie" field.
    Does anyone know how to handle this field or provide me any useful documentation.
    Any help is appreciated.

    A cookie is set with the "Set-Cookie: "-field in the http header, like this:
    Set-Cookie: mycookie=someValue
    This cookie should only be returned to the same host as it came from, like this in the http header of a request:
    Cookie: mycookie=someValue
    If the parameter looks like this:
    Set-Cookie: mycookie=someValue; path=/cgi-bin
    , the cookie should only be returned to the host if the request path starts with /cgi-bin
    If the parameter looks liek this:
    Set-Cookie: mycookie=someValue; domain=.mydomain.com
    , the cooke should be returned to all hosts in the .mydomain.com-domain
    There is also a "expires="-field, which works as expected and a "secure"-field, which I'm not sure how to handle. Maybe the cookie should only be sent to an SSL-enabled host?
    Hope this helps you. Bye,
    Dag W.

  • Mail-Adapter Integration Engine Error during parsing of SOAP header

    Hello,
    we use XI with the mail adapter. Most of the messages are processed correctly. But sometimes I get following errors in the J2EE-logviewer:
    Transmitting the message to endpoint http://<xi-host>:<http-port>/sap/xi/engine
    ?type=entry using connection AFW failed, due to: com.sap.aii.af.ra.ms.a
    pi.RecoverableException: Received HTTP response code 500 : Error during
    parsing of SOAP header.
    Failed to transmit message 4e913640-4cc5-11dc-8560-00e000c55366(OUTBOUND)
    due to com.sap.aii.af.ra.ms.api.RecoverableException: Received HTTP
    response code 500 : Error during parsing of SOAP header.
    Retries exceded, set message
    4e913640-4cc5-11dc-8560-00e000c55366(OUTBOUND) to status NON_DELIVERED.
    Has somebody else the same problem and solved it or any idea what the matter could be?
    Thanks for your help
    Christian

    Hi Reddy,
    We´ve got the following scenario:
    Exchange-Server (is always up)
    XI Mail-ReceiverAdapter
    I use IMAP4 to access the Outlook-Email-Box
    Everything works fine. But some Emails aren´t processed.
    I think it´s a problem between adapterframework and the integration engine?
    There is no difference between the emails?
    If you´ll need further informations ask me?
    Thanks

  • Error during parsing of SOAP header

    Hi all,
    I have configured the j-meter to send an http request to inegration engine of PI.
    The request xml that I am sending is as follows:
    <SOAP:Envelope xmlns:SOAP="http://schemas.xmlsoap.org/soap/envelope/">
    <SOAP:Header>
    <SOAP:Main xmlns:SAP="http://sap.com/xi/XI/Message/30"
    versionMajor="003" versionMinor="000" SOAP:mustUnderstand="1">
    </SOAP:Main>
    </SOAP:Header>
    <SOAP:Body>
    <ns1:UnitOfMeasure xmlns:ns1="urn:sapappl:mdm:cp:eame:masterdata:uom:620">
    <Record>
    <FinishedMaterialCode>000000000000000233</FinishedMaterialCode>
    <BaseUOM>KG</BaseUOM>
    <AlternateUOM>GEB</AlternateUOM>
    <UnitsInAlternateUOM>100</UnitsInAlternateUOM>
    <UnitsInBaseUOM>2268</UnitsInBaseUOM>
    <Active_Deleted></Active_Deleted>
    </Record>
    </ns1:UnitOfMeasure>
    </SOAP:Body>
    </SOAP:Envelope>
    I am getting the following response from the XI:
    <SOAP:Envelope xmlns:SOAP="http://schemas.xmlsoap.org/soap/envelope/">
    <SOAP:Header>
    </SOAP:Header>
    <SOAP:Body>
    <SOAP:Fault xmlns:SOAP="http://schemas.xmlsoap.org/soap/envelope/"><faultcode>SOAP:Client</faultcode><faultstring>Error during parsing of SOAP header</faultstring><faultactor>http://sap.com/xi/XI/Message/30</faultactor><detail><SAP:Error xmlns:SAP="http://sap.com/xi/XI/Message/30" xmlns:SOAP="http://schemas.xmlsoap.org/soap/envelope/" SOAP:mustUnderstand="1"><SAP:Category>XIProtocol</SAP:Category><SAP:Code area="PARSER"/><SAP:P1/><SAP:P2/><SAP:P3/><SAP:P4/><SAP:AdditionalText/><SAP:ApplicationFaultMessage namespace=""/><SAP:Stack>System error in parser
    </SAP:Stack></SAP:Error></detail></SOAP:Fault>
    </SOAP:Body>
    </SOAP:Envelope>
    Any idea as to why PI is not able to parse the request header?
    Thanks,
    Amit

    Hi,
    Better to take WSDL from PI(ID window) and try.

  • How to set custom HTTP header for single sign on

    Currently we just begin to use an application called "etran". This application requires user name and password to login. Now, my assignment is to integrate etran application in our internal application. This means that somewhere in our internal application, there is a link leads to the etran application.
    It is going to be single sign on, that means that once user logs into our internal application, when he/she clicks on the etran link, no sign on to etran is needed.
    I consult with the technical people in etran. they said that our internal application needs to send a "login request" to etran via SSL with the user's information encoded in base 64 format. etran captures the HTTP header containing user authentication and authorization information, and parses the required information from the HTTP header.
    My question is that how I set user information in HTTP header? From my understanding, once I am able to set the user information in HTTP header, it is in base 64 format?
    Thanks in advance for your help.

    sharon38_74 wrote:
    they said that our internal application needs to send a "login request" to etran via SSL with the user's information encoded in base 64 format. etran captures the HTTP header containing user authentication and authorization information, and parses the required information from the HTTP header.
    My question is that how I set user information in HTTP header? From my understanding, once I am able to set the user information in HTTP header, it is in base 64 format?Your application need to act like a proxy. You can invoke a HTTP request programmatically using java.net.URLConnection. You can set request headers using URLConnection#setRequestProperty(). Also see the API docs: [http://java.sun.com/javase/6/docs/api/java/net/URLConnection.html]. You only need to know the header field name where to set the Base64-encoded value in. You need to Base64-encode the value yourself.

  • Http Header for SOAP message.

    Hello,
    I need to set some custom HTTP Header when i send the SOAP message to an endpoint.
    I tried this..but doesn't solve my requirement.
    SOAPMessage soapmsg = messageFactory.createMessage();
    MimeHeaders mime = soapmsg.getMimeHeaders();
    mime.addHeader("SOAPAction", "xxxx");
    mime.addHeader("Sender", "yyy");
    SOAPMessage reply = connection.call(soapmsg, destination);
    Can anyone please guide me how to set HTTP headers for SOAP?
    Thanks,

    The following snippet is some code froma stand-alone web service client that I use for testing. It picks up an XML as the payload of the web service, wraps it in a SOAP message and fires it at the web service endpoint.
         System.out.println("Create the SOAP message.\n"); 
         MessageFactory messageFactory = MessageFactory.newInstance();
         SOAPMessage message = messageFactory.createMessage();
         System.out.println("Creating a DOM object from the JAXB payload.");
         DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
              factory.setValidating(false);
                 factory.setNamespaceAware(true);
         DocumentBuilder parser = factory.newDocumentBuilder();
         Document doc = parser.parse("file:payload.xml");
         //  Add the HTTP headers.
         message.getMimeHeaders().addHeader("User-Agent", "Mozilla/4.0 [en] (WinNT; I)");
         message.getMimeHeaders().addHeader("Host", "localhost:9080");
         message.getMimeHeaders().addHeader("Content-type", "text/xml");
         message.getMimeHeaders().addHeader("SOAPAction", "http://www.xxx.com.au/wsdl/someWebService");
         message.setProperty(SOAPMessage.CHARACTER_SET_ENCODING, "utf-8");
         SOAPEnvelope envelope = message.getSOAPPart().getEnvelope();
         envelope.addNamespaceDeclaration("n", "http://xxx/webService");
         envelope.addNamespaceDeclaration("xsd", "http://www.w3.org/2001/XMLSchema");
         envelope.addNamespaceDeclaration("xsi", "http://www.w3.org/2001/XMLSchema-instance");
         System.out.println("Adding the payload to the SOAP body.\n");
         SOAPBody body = message.getSOAPBody();
         SOAPBodyElement docElement = body.addDocument(doc);
         System.out.println("This is the SOAP message.\n");
         message.writeTo(System.out);
         System.out.println("\nPutting the payload on the wire.\n");
         SOAPConnectionFactory conFactry = SOAPConnectionFactory.newInstance();
         SOAPConnection connection = conFactry.createConnection();          
         URL endpoint = new URL("http://localhost:9080/xxx/services/yyy-webservices");
         SOAPMessage response = connection.call(message, endpoint);
         System.out.println("Payload sent. Closing the connection.\n");
         connection.close();

  • How can I set "SOAPAction" http header using SAAJ

    When I send soap request, http header's like below
    SOAPAction: ""
    But, I'd like to send like this
    SOAPAction: "http://tempuri.org/HelloWorld"
    How can I that using SAAJ ?
    My code is
    String xml = "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n" +
    "<soap:Envelope xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\">\n" +
    " <soap:Body>\n" +
    " <HelloWorld xmlns=\"http://tempuri.org/\" />\n" +
    " </soap:Body>\n" +
    "</soap:Envelope>";
    Document doc = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(new ByteArrayInputStream(xml.getBytes()));
    DOMSource domSource = new DOMSource(doc);
    SOAPMessage message = MessageFactory.newInstance().createMessage();
    message.setProperty(SOAPMessage.CHARACTER_SET_ENCODING, "utf-8");
    message.setProperty(SOAPMessage.WRITE_XML_DECLARATION, "true");
    message.getSOAPPart().setContent(domSource);
    message.writeTo(System.out);
    SOAPConnection connection = SOAPConnectionFactory.newInstance().createConnection();
    SOAPMessage response = connection.call(message, helloURL);
    connection.close();
    SOAPBody body = response.getSOAPBody();
    if ( body.hasFault() )
    SOAPFault newFault = body.getFault();
    System.out.println("SoapBody has fault.");
    System.out.println("code=" + newFault.getFaultCodeAsName());
    System.out.println("message=" + newFault.getFaultString());
    System.out.println("actor=" + newFault.getFaultActor());
    else
    System.out.println("Call Successed.");
    System.out.println(body);
    }

    message.getMimeHeaders().addHeader("SOAPAction", "http://tempuri.org/HelloWorld");

  • Prolem with Cache-Control:max-age http header

    Hello
    It seems that safari do not take into account Cache-Control:max-age=31536000 http header.
    Sending this header to the browser I would expect that safari will not ask the server for these resources before current date + one year.
    It's the way IE and FireFox are working but safari is asking the server for these resources every time my html page is loaded (see http requests below).
    Server returns a 304 status to indicate that the resource is not modified.
    Does somebody have an idea about this strange behaviour?
    I'm surprise that Safari do not respect RFC specifications.
    Is there a settings to enable Cache-Control ?
    Perhaps I forgot safari's specific headers..
    Thanks
    +GET 786+
    GET /xtend/htmrsrc/LIB/XtendAjaxScripts.js HTTP/1.1
    +RESP 786+
    HTTP/1.1 200 OK
    Server: Apache-Coyote/1.1
    Last-Modified: Wed, 15 Oct 2008 13:25:24 GMT
    *Cache-Control: PUBLIC, max-age=31536000, must-revalidate*
    *Expires: Thu, 05 Nov 2009 13:09:10 GMT*
    Content-Type: application/x-javascript;utf-8
    Content-Length: 2856
    Date: Wed, 05 Nov 2008 13:09:10 GMT
    +GET 799+
    GET /xtend/htmrsrc/LIB/XtendAjax.js HTTP/1.1
    If-Modified-Since: Fri, 24 Oct 2008 07:59:24 GMT
    +RESP 799+
    HTTP/1.1 304 Not modifed
    Server: Apache-Coyote/1.1
    Date: Wed, 05 Nov 2008 13:11:19 GMT

    This is a User to User forum, not a developer forum. You need to avail yourself of developer resources for this problem instead of posting them here.
    Mulder

  • Load runner: in which the HTTP header is stored?

    I've used Mercury Load runner to stress test our Web application.
    We used a session variable in the url, so after I scripted, I can't replay it (error: session is expired). So, I want to know, in Mercury Load runner, where the HTTP header is stored?

    Hi,
    The issue is not where the http header is stored. For make it works you just have to create a correlation to get this session id dynamically in your script.
    For know how to do it have a look at the web_reg_save_param function documentation or ask google.
    Regards,
    Sylvain

  • SSO to other apps via HTTP header variable

    We are on NW EP6.0 SP16. We need to add the "user id" as http header variable so that other apps which are non SAP can access our header variable and log on with that user id. Is this available by default? Or we want to achieve this how best we can achieve this.
    We can use the code to get the user id and add it to header variable. If we use this route which is the jsp page we need to add the code?
    Thanks

    Hi,
      we can you login modules provided by SAP to accomplish this.. you can use header variable authentication login module to acheive your requirement.
      please refer: http://help.sap.com/saphelp_nw04/helpdata/en/8f/ae29411ab3db2be10000000a1550b0/frameset.htm
    Hope that helps.
    Regards,
    S.Divakar

  • Single-Sign-On (SSO) configuration on JAVA Stack through HTTP Header method

    Hello SDN community,
    in the context of a Proof of Concept, we are testing the integration of Microsoft Sharepoint Portal with SAP Backend (addin) systems.
    As the architecture impose use an external scenario (access from the internet), we couldn't use the Kerberos (SPNego) solution and thus we chosed the http header solution which in short uses an intermediary web server (in this case the IIS of the MOSS solution) which will act as authority.
    I miss information on how the workflow works for this http header authentication method. Through the visual administrator of the addin JAVA stack, it is possible to configure each application with a customized authentication (a choice of security modules). But this all that I know.
    My task is to configure SSO. From a sharepoint portal, the user should be able to access Web Dynpros and BSPs. I imagine that the very first call to a webdynpro or bsp (or maybe when we log on the sharepoint portal), the request to the WDP or BSP will first be forwareded by the intermediary server to the JAVA stack (or is it the SAP dispatcher that has to be configured).
    Is there an application to be built on the java stack to deal with the authentication, modify http header?
    What will the Java stack return? a sap long ticket? a token?
    How will the redirect work (to by example a BSP which is in the ABAP stack)?
    SAP preconise to secure with SSL the link between the intermediary web server and the JAVA stack, is IP restriction also a solution?
    A lot of questions about how this SSO http header should work,
    I would be very greatful for any help, or info,
    Kind regards,
    Tanguy Mezzano

    Hi Tanguy,
    to tell you the truth I'm really unsure about what you are trying to achieve. When I started posting to your thread I thought all you wanted was trying to access your J2EE engine via Browser and authenticate against the engine using HTTP Header Variables. Nevermind:
    Here are some answers to your question:
    in fact I did succeed, the problem was that even after domain-relaxation done by the J2EE, I had to change the domain of th SAP cookie to the bbbb.domain.com to be understood (I would have thought that all hosts in/under domain .domain would have accepted such a cookie but it seems that no...).
    The server does not care about the domain because Cookies in an HTTP Request do not contain any domain information. The domain is just important when the Cookie is set by the server so your Client (Browser) will know in which cases the Cookie may be sent or not. So if your domain is xxx.yyy.domain.com and your cookie is issued to .domain.com then your Browser will definitely sent it to all hosts under .domain.com (This includes xxx.yyy.domain.com etc.)
    My current scenario is: in a first request get a SAP Logon Ticket from the Java Stack, then change its domain and then directly call the backend with it.
    You can do that but there is no Client involved in this scenario. So this is useful if you just want to test the functionality (e.g. authentication to J2EE using Header Variables (This works finally!!!) and then use the fetched Logon Ticket to test SSO against any trusted Backend!!)
    So everything's is in a Java Client application without using any redirection.
    If I understand you, you're solution is from the Browser call a servlet (which is deployed on the Java Stack and has no authentication schema) by passing to it our http header.
    No, you should initially authenticate somewhere! I thought that maybe you had some resource you access before accessing the Java Stack. This could be any application (e.g. deployed on a Tomcat or JBOSS or other server or if you like even SAP J2EE). After authenticating there you are aware of the username and could use it to  procceed (e.g. Authenticate against the J2EE using the same user and HTTP Header authentication for that particular user!)
    That servlet will transfer the http header (with the HttpClient app) in order to get from the Java Stack a SAP Logon ticket, and then to redirect to the resource and by sending back the cookie in client browser. Am I correct?
    This was just a suggestion because I realized that there was no Client ever involved in any of your testing (looked strange to me!). I was just thinking that it would be easier for you to just get the Cookie into your Browser so your Browser would do the rest for you (in your case finally send the Logon Ticket Cookie to your Backend to test SSO using Logon Tickets!).
    The AuthenticatorServlet somehow serves as a Proxy to your client because your client is not able to set the Header Variable. That's why I initially suggested to use a Proxy (e.g. Apache) for that purpose. The problem is just that if you use a Proxy you will have to tell it somehow which username it should set in the Header Variable (e.g. using a URL Parameter or using a personalized client certificate and fetch the username (e.g. cn=<username> from the certificate!)
    This way of doing would simplify the calls for sso for each new application needing authentication, instead of having all code each time in it...
    I'm stuck again! Do you want to authenticate an End User or do you want to authenticate an application that needs to call any resources in your Backend that requires authentication?
    So my problem now, is how to call the servlet from the client browser:
    I'm trying to call my servlet from the browser but I don't succeed. I am able to understand how to reach a jsp from the Java Stack, but not to reach a servlet. I don't find the path to my servlet:
    <FORM method="POST" action="SSORedirect2" >
    A JSP is a servlet too. There is just no JAVA Class involved!
    You do not need any POST Request to invoke a Servlet.
    I see that my servlet is deployed, but I don't how what path to give to my form to invoke the servlet, here follows my web.xml
      <?xml version="1.0" encoding="UTF-8" ?>
      <!DOCTYPE web-app (View Source for full doctype...)>
    - <web-app>
      <display-name>WEB APP</display-name>
      <description>WEB APP description</description>
    - <servlet>
      <servlet-name>SSOredirect2</servlet-name>
      <servlet-class>com.atosorigin.examples.AuthenticatorServlet</servlet-class>
      </servlet>
    - <servlet>
      <servlet-name>SSORedirect2.jsp</servlet-name>
      <jsp-file>/SSORedirect2.jsp</jsp-file>
      </servlet>
    - <security-constraint>
      <display-name>SecurityConstraint</display-name>
    - <web-resource-collection>
      <web-resource-name>WebResource</web-resource-name>
      <url-pattern>/*</url-pattern>
      <http-method>GET</http-method>
      <http-method>POST</http-method>
      </web-resource-collection>
    - <auth-constraint>
      <role-name>DefaultSecurityRole</role-name>
      </auth-constraint>
      </security-constraint>
    - <security-role>
      <role-name>DefaultSecurityRole</role-name>
      </security-role>
      </web-app>
    If you have an AuthenticatorServlet Class all you need is to add the Servlet Mapping in your web.xml file
    e.g.
    <servlet>
      <description>
      </description>
      <display-name>AuthenticatorServlet</display-name>
      <servlet-name>AuthenticatorServlet</servlet-name>
      <servlet-class>com.atosorigin.examples.AuthenticatorServlet</servlet-class>
    </servlet>
    <servlet-mapping>
      <servlet-name>AuthenticatorServlet</servlet-name>
      <url-pattern>/AuthenticatorServlet</url-pattern>
    </servlet-mapping>
    You can directly call the Servlet in your Browser by calling the URL provided in the url-pattern of your Servlet mapping ( in this case /AuthenticatorServlet). The engine will invoke the Class "com.atosorigin.examples.AuthenticatorServlet" in the background and do whatever you defined there!
    I have also to pass my http header and the redirectUrl in the GET request.
    If you like! I just suggested this for testing purposes. As I stated before you need a way to tell your proxy (or in your case AuthenticatorServlet) which user should be set when calling the Engine in order to authenticate using HTTP Header. You could use the URL Paramater to define the user you actually want to use when you set the Header Variable.
    I just introduced the redirectURL because you were talking about redirects all the time. So if you finally want to call the Backend you could define the Backend URL in the redirectURL Parameter and the Servlet will make sure that you are redirected to this location after the whole process!
    Thx for your input very helpful,
    But again 0 points
    Cheers

  • What happens to the HTTP header parameters I put there?

    Our tool puts some parameters into the HTTP header. But, it appears that the Dispatcher is not passing them to the WAS.  Could this be?
    Is there a way to tell the Dispatcher to not drop our HTTP header stuff? Perhaps a configuration setting? I didn't find any.
    When I set a break in my servlet running on NW WAS, I see:
    referer:
    Cookie:
    etc.
    but I don't see the parameters we put there.
    This is the NW SneakPreview download.

    Hi Farokh,
    I think there should be much problem passing parameters  through the Url. I am sorry however that I have not worked much on the Servlet but on WebDynpro, which I can share with you if its of any use to you.
    Regards
    Noufal

  • How do I set the Http Header POST URL in SAAJ?

    Hi ,
    I am a newbie in the field of web services. I was trying to create a SOAP request with Http Header POST information having a POST url like
    the following:
    POST /OMASTI.xml HTTP/1.1
    Content-Type: multipart/related; boundary="eladeladeladeladeladeladeladeladelad"; type=text/xml; start=11814460
    Content-Length: 54596
    Host: unspecified
    SOAPAction: ""
    to that effect I did the following in the SAAJ client:
    MimeHeaders md = message.getMimeHeaders();
              md.setHeader("SOAPAction" ,"\"\"");
              md.setHeader("POST" ,"/OMASTI.xml");
    However what I got was :
    POST / HTTP/1.1
    Accept: text/xml, text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2
    SOAPAction: ""
    POST: /OMASTI.xml
    Content-Type: multipart/related; type="text/xml"; boundary="----=_Part_2_32124414.1153146262750"
    Content-Length: 3352
    Cache-Control: no-cache
    Pragma: no-cache
    User-Agent: Java/1.5.0_07
    Host: www.google.com
    Connection: keep-alive
    I have two POSTs in the header. How do I fix it? Please Help ASAP.
    Regards,
    Zeus

    Hi,
    Please forgive my ignorance. I did the same as you said. and then checked the Http request being sent out using ethreal software... it was the same as I had told earlier. Is only POST supported by the connection object? And the does the URL that comes in the Mime header as POST refer to the URL to which the request was sent? what I mean is that if the mime header says
    POST /OMASTI.xml HTTP 1.1, does it mean that the URL that was passed to the connection object was "/OMASTI.xml" ? I had given the url as http://www.google.com to test the request being sent.. I only have a sample SOAP request which shows a HTTP header with the post url as I said before. I need to create a SOAP request with the same sort of Http header and the body needs to follow a certain OMA-STI protocol. My experience in the SOAP domain is almost nil. So please enlighten me.
    Thanks in advance,
    zeus

Maybe you are looking for