Search the web
Sign In
New User? Sign Up
soaplite · SOAP::Lite for Perl (soaplite.com)
? Already a member? Sign in to Yahoo!

Yahoo! Groups Tips

Did you know...
Want your group to be featured on the Yahoo! Groups website? Add a group photo to Flickr.

Best of Y! Groups

   Check them out and nominate your group.
Having problems with message search? Fill out this form to ensure your group is one of the first to be migrated to the new message search system.

Messages

  Messages Help
Advanced
problem creating soap request   Message List  
Reply | Forward Message #6340 of 6387 |

Hi all together!

I have a problem creating a soap-lite client request including some saml tags.

I have the code in java, that does the correct request at the soap server, but I could not do that with soap-lite.

I always do something wrong and get the response:

wrong request format.

Could anyone tell me the right code for requesting this java code through soap-lite:

import java.io.IOException;

import java.util.Vector;

import javax.servlet.ServletException;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import javax.servlet.http.HttpSession;

import javax.xml.namespace.QName;

import javax.xml.parsers.DocumentBuilder;

import javax.xml.parsers.DocumentBuilderFactory;

import javax.xml.rpc.Call;

import javax.xml.rpc.Service;

import javax.xml.rpc.ServiceFactory;

import org.apache.axis.message.SOAPBodyElement;

import org.apache.xml.serialize.LineSeparator;

import org.apache.xml.serialize.OutputFormat;

import org.apache.xml.serialize.XMLSerializer;

import org.jaxen.JaxenException;

import org.jaxen.SimpleNamespaceContext;

import org.jaxen.dom.DOMXPath;

import org.w3c.dom.Attr;

import org.w3c.dom.Document;

import org.w3c.dom.Element;

import org.w3c.dom.Node;

import org.w3c.dom.NodeList;

/**

* Beispiel für ein Login-Servlet, das von MOA-ID-AUTH über einen Redirect aufgerufen wird.

* Es werden demonstriert:

* - Parameterübergabe von MOA-ID-AUTH

* - Aufruf des MOA-ID-AUTH Web Service zum Abholen der Anmeldedaten über das Apache Axis Framework

* - Parsen der Anmeldedaten mittels der XPath Engine "Jaxen"

* - Speichern der Anmeldedaten in der HTTPSession

* - Redirect auf die eigentliche Startseite der OA

*

* @author Paul Ivancsics

*/

public class LoginServletExample extends HttpServlet {

// Web Service QName und Endpoint

private static final QName SERVICE_QNAME = new QName("GetAuthenticationData");

private static final String ENDPOINT =

"http://localhost:8080/moa-id-auth/services/GetAuthenticationData";

// NamespaceContext für Jaxen

private static SimpleNamespaceContext NS_CONTEXT;

static {

NS_CONTEXT = new SimpleNamespaceContext();

NS_CONTEXT.addNamespace("saml", "urn:oasis:names:tc:SAML:1.0:assertion");

NS_CONTEXT.addNamespace("samlp", "urn:oasis:names:tc:SAML:1.0:protocol");

NS_CONTEXT.addNamespace("pr", "http://reference.e-government.gv.at/namespace/persondata/20020228#");

}

/**

* Servlet wird von MOA-ID-AUTH nach erfolgter Authentisierung über ein Redirect aufgerufen.

*/

protected void doGet(HttpServletRequest req, HttpServletResponse resp)

throws ServletException, IOException {

// Parameter "Target" und "SAMLArtifact" aus dem Redirect von MOA-ID-AUTH lesen

String target = req.getParameter("Target");

String samlArtifact = req.getParameter("SAMLArtifact");

try {

// DOMBuilder instanzieren

DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();

factory.setNamespaceAware(true);

DocumentBuilder builder = factory.newDocumentBuilder();

// <samlp:Request> zusammenstellen und in einen DOM-Baum umwandeln

String samlRequest =

"<?xml version=\"1.0\" encoding=\"UTF-8\"?><samlp:Request IssueInstant=\"2003-01-01T00:00:00+02:00\" MajorVersion=\"1\" MinorVersion=\"0\" RequestID=\"12345678901234567890\" xmlns:samlp=\"urn:oasis:names:tc:SAML:1.0:protocol\"><samlp:AssertionArtifact>"

+ samlArtifact

+ "</samlp:AssertionArtifact></samlp:Request>";

Document root_request = builder.parse(new ByteArrayInputStream(samlRequest.getBytes()));

// Neues SOAPBodyElement anlegen und mit dem DOM-Baum füllen

SOAPBodyElement body = new SOAPBodyElement(root_request.getDocumentElement());

SOAPBodyElement[] params = new SOAPBodyElement[] { body };

// AXIS-Service für Aufruf von MOA-ID-AUTH instanzieren

Service service = ServiceFactory.newInstance().createService(SERVICE_QNAME);

// Axis-Call erzeugen und mit Endpoint verknüpfen

Call call = service.createCall();

call.setTargetEndpointAddress(ENDPOINT);

// Call aufrufen und die Antwort speichern

System.out.println("Calling MOA-ID-AUTH ...");

Vector responses = (Vector) call.invoke(params);

// erstes BodyElement auslesen

SOAPBodyElement response = (SOAPBodyElement) responses.get(0);

// <samlp:Response> als DOM-Baum holen

Document responseDocument = response.getAsDocument();

Element samlResponse = responseDocument.getDocumentElement();

// <samlp:Response> auf System.out ausgeben

System.out.println("Response received:");

OutputFormat format = new OutputFormat((Document) responseDocument);

format.setLineSeparator(LineSeparator.Windows);

format.setIndenting(true);

format.setLineWidth(0);

XMLSerializer serializer = new XMLSerializer(System.out, format);

serializer.asDOMSerializer();

serializer.serialize(responseDocument);

// <samlp:StatusCode> auslesen

Attr statusCodeAttr = (Attr)getNode(samlResponse, "/samlp:Response/samlp:Status/samlp:StatusCode/@Value");

String samlStatusCode = statusCodeAttr.getValue();

System.out.println("StatusCode: " + samlStatusCode);

// <saml:Assertion> auslesen

if ("samlp:Success".equals(samlStatusCode)) {

Element samlAssertion = (Element)getNode(samlResponse, "/samlp:Response/saml:Assertion");

// FamilyName aus der <saml:Assertion> parsen

Node familyNameNode = getNode(samlAssertion, "//saml:AttributeStatement/saml:Attribute[@AttributeName=\"PersonData\"]/saml:AttributeValue/pr:Person/pr:Name/pr:FamilyName");

String familyName = getText(familyNameNode);

System.out.println("Family name: " + familyName);

// weitere Anmeldedaten aus der <saml:Assertion> parsen

// ...

// Anmeldedaten und Target in der HTTPSession speichern

HttpSession session = req.getSession();

session.setAttribute("UserFamilyName", familyName);

session.setAttribute("Geschaeftsbereich", target);

// weitere Anmeldedaten in der HTTPSession speichern

// ...

// Redirect auf die eigentliche Startseite

resp.sendRedirect("/index.jsp");

}

}

catch (Exception ex) {

ex.printStackTrace();

}

}

/** Returns the first node matching an XPath expression. */

private static Node getNode(Node contextNode, String xpathExpression) throws JaxenException {

DOMXPath xpath = new DOMXPath(xpathExpression);

xpath.setNamespaceContext(NS_CONTEXT);

return (Node) xpath.selectSingleNode(contextNode);

}

/** Returns the text that a node contains. */

public static String getText(Node node) {

if (!node.hasChildNodes()) {

return "";

}

StringBuffer result = new StringBuffer();

NodeList list = node.getChildNodes();

for (int i = 0; i < list.getLength(); i++) {

Node subnode = list.item(i);

if (subnode.getNodeType() == Node.TEXT_NODE) {

result.append(subnode.getNodeValue());

} else if (subnode.getNodeType() == Node.CDATA_SECTION_NODE) {

result.append(subnode.getNodeValue());

} else if (subnode.getNodeType() == Node.ENTITY_REFERENCE_NODE) {

// Recurse into the subtree for text

// (and ignore comments)

result.append(getText(subnode));

}

}

return result.toString();

}

}

--

Only the soap request is needed, not the parsing after the response.:-)

hope anybody can help me?

Thank you very much,

cheers,

Martin



Sun Jul 5, 2009 9:33 am

thinkingsystems
Offline Offline
Send Email Send Email

Forward
Message #6340 of 6387 |
Expand Messages Author Sort by Date

Hi all together! I have a problem creating a soap-lite client request including some saml tags. I have the code in java, that does the correct request at the...
Martin Thomas Schrott
thinkingsystems
Offline Send Email
Jul 6, 2009
3:13 pm
Advanced

Copyright © 2009 Yahoo! Inc. All rights reserved.
Privacy Policy - Terms of Service - Guidelines - Help