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...
Real people. Real stories. See how Yahoo! Groups impacts members worldwide.

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
creating soap request from java example   Message List  
Reply | Forward Message #6339 of 6387 |
creating soap request from java example

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:At\
tributeValue/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 7:31 pm

thinkingsystems
Offline Offline
Send Email Send Email

Forward
Message #6339 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
8:00 am

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

... Do you have service specification (wsdl)? I'm not familiar with java. -- Radek...
rahed
raherh
Offline Send Email
Jul 7, 2009
1:37 pm
Advanced

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