You are viewing a plain text version of this content. The canonical link for it is here.
Posted to stonehenge-commits@incubator.apache.org by ch...@apache.org on 2009/11/25 12:50:14 UTC

svn commit: r884082 - in /incubator/stonehenge/trunk/stocktrader/wsas/business_service/src/org/apache/stonehenge/stocktrader/services: TradeConfigServiceClient.java TradeServiceImpl.java

Author: chintana
Date: Wed Nov 25 12:50:14 2009
New Revision: 884082

URL: http://svn.apache.org/viewvc?rev=884082&view=rev
Log:
Getting profile ID from the token.

Modified:
    incubator/stonehenge/trunk/stocktrader/wsas/business_service/src/org/apache/stonehenge/stocktrader/services/TradeConfigServiceClient.java
    incubator/stonehenge/trunk/stocktrader/wsas/business_service/src/org/apache/stonehenge/stocktrader/services/TradeServiceImpl.java

Modified: incubator/stonehenge/trunk/stocktrader/wsas/business_service/src/org/apache/stonehenge/stocktrader/services/TradeConfigServiceClient.java
URL: http://svn.apache.org/viewvc/incubator/stonehenge/trunk/stocktrader/wsas/business_service/src/org/apache/stonehenge/stocktrader/services/TradeConfigServiceClient.java?rev=884082&r1=884081&r2=884082&view=diff
==============================================================================
--- incubator/stonehenge/trunk/stocktrader/wsas/business_service/src/org/apache/stonehenge/stocktrader/services/TradeConfigServiceClient.java (original)
+++ incubator/stonehenge/trunk/stocktrader/wsas/business_service/src/org/apache/stonehenge/stocktrader/services/TradeConfigServiceClient.java Wed Nov 25 12:50:14 2009
@@ -23,12 +23,14 @@
 import java.util.Properties;
 
 import org.apache.axis2.context.MessageContext;
-import org.apache.stonehenge.stocktrader.config.Config_svcStub;
-import org.apache.stonehenge.stocktrader.config.xsd.BSConfigRequest;
+/*import org.apache.stonehenge.stocktrader.config.xsd.BSConfigRequest;
 import org.apache.stonehenge.stocktrader.config.xsd.BSConfigRequestE;
 import org.apache.stonehenge.stocktrader.config.xsd.BSConfigResponse;
-import org.apache.stonehenge.stocktrader.config.xsd.BSConfigResponseE;
+import org.apache.stonehenge.stocktrader.config.xsd.BSConfigResponseE;*/
 import org.apache.stonehenge.stocktrader.util.StockTraderUtility;
+import org.apache.stonehenge.stocktrader.config.ConfigServiceStub;
+import org.apache.stonehenge.stocktrader.config.trade_configservicedatacontract.*;
+import org.apache.stonehenge.stocktrader.config.trade.*;
 
 public class TradeConfigServiceClient {
 	private static final String SERVICE_URL = "org.apache.stonehenge.stocktrader.TradeConfigServiceClient.url";
@@ -52,7 +54,7 @@
 	}
 
 	public TradeOrderConfig getTradeOrderConfig() throws RemoteException {
-		Config_svcStub stub = new Config_svcStub(prop.getProperty(SERVICE_URL));
+		/*ConfigServiceStub stub = new ConfigServiceStub(prop.getProperty(SERVICE_URL));
 		BSConfigRequestE configRequestE = new BSConfigRequestE();
 		BSConfigRequest param = new BSConfigRequest();
 		param.setBS("WSAS_BS");
@@ -61,8 +63,20 @@
 		BSConfigResponse configResponse = configResponseE.getBSConfigResponse();
 		TradeOrderConfig config = new TradeOrderConfig();
 		config.setEndpointURL(configResponse.getOPS().toString());
-		config.setSecure(configResponse.getSec());
-		return config;
+		config.setSecure(configResponse.getSec());*/
+
+        ConfigServiceStub stub = new ConfigServiceStub(prop.getProperty(SERVICE_URL));
+        BSConfigRequest configRequest = new BSConfigRequest();
+        configRequest.setBSName("WSAS_BS");
+        GetBSConfig bsConfig = new GetBSConfig();
+        bsConfig.setBs(configRequest);
+        GetBSConfigResponse configResponse = stub.getBSConfig(bsConfig);
+        
+        TradeOrderConfig orderConfig = new TradeOrderConfig();
+        orderConfig.setEndpointURL(configResponse.getGetBSConfigResult().getOPS().toString());
+        orderConfig.setSecure(configResponse.getGetBSConfigResult().getSec());
+
+		return orderConfig;
 	}
 
 }

Modified: incubator/stonehenge/trunk/stocktrader/wsas/business_service/src/org/apache/stonehenge/stocktrader/services/TradeServiceImpl.java
URL: http://svn.apache.org/viewvc/incubator/stonehenge/trunk/stocktrader/wsas/business_service/src/org/apache/stonehenge/stocktrader/services/TradeServiceImpl.java?rev=884082&r1=884081&r2=884082&view=diff
==============================================================================
--- incubator/stonehenge/trunk/stocktrader/wsas/business_service/src/org/apache/stonehenge/stocktrader/services/TradeServiceImpl.java (original)
+++ incubator/stonehenge/trunk/stocktrader/wsas/business_service/src/org/apache/stonehenge/stocktrader/services/TradeServiceImpl.java Wed Nov 25 12:50:14 2009
@@ -70,12 +70,117 @@
 import com.ibm.websphere.samples.trade.UpdateAccountProfileResponse;
 import com.ibm.websphere.samples.trade.GetProfileIdFromStsIdentifier;
 import com.ibm.websphere.samples.trade.GetProfileIdFromStsIdentifierResponse;
+import java.util.Map;
+import java.util.Iterator;
+import java.util.HashMap;
+import org.apache.axiom.om.OMElement;
+import org.apache.axiom.soap.SOAPEnvelope;
+import org.apache.axiom.soap.SOAPHeader;
+import org.apache.axiom.soap.SOAPHeaderBlock;
+import org.apache.axis2.context.MessageContext;
+import javax.xml.namespace.QName;
 
 public class TradeServiceImpl extends TradeServiceWcfSkeleton {
 	private static final Log logger = LogFactory.getLog(TradeServiceImpl.class);
 
 	private final TraderServiceManager mgr = new TraderServiceManager();
 
+    private static final String WSSE_NS = "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd";
+    private static final String WSSE_LN = "Security";
+    private static final String ASSERTION_TOKEN_IN = "Assertion";
+    private static final String ATTRIBUTE_STATMENT_IN = "AttributeStatement";
+    private static final String ATTRIBUTE_IN = "Attribute";
+
+    private static final String ATTRIBUTE_NS = "AttributeNamespace";
+    private static final String ATTRIBUTE_VALUE = "AttributeValue";
+    private static final QName SEC_HEADER = new QName(WSSE_NS, WSSE_LN);
+    public final static String SAML10_NS = "urn:oasis:names:tc:SAML:1.0:assertion";
+    public final static String SAML11_NS = "http://docs.oasis-open.org/wss/oasis-wss-saml-token-profile-1.1#SAMLV1.1";
+    public final static String SAML20_NS = "urn:oasis:names:tc:SAML:2.0:assertion";
+
+    private String getProfileIdFromClaims() {
+        Map<String, String> attributes = null;
+        attributes = getSAMLAssertions(MessageContext.getCurrentMessageContext().getEnvelope());
+
+        if (attributes != null) {
+            for (String key : attributes.keySet()) {
+                if (key.equals("http://schemas.xmlsoap.org/ws/2005/05/identity/claims")) {
+                    return attributes.get(key);
+                }
+            }
+        }
+
+        return null;
+    }
+
+    private Map<String, String> getSAMLAssertions(SOAPEnvelope envelope) {
+        SOAPHeaderBlock secHeader = null;
+        OMElement assertionToken = null;
+
+        secHeader = getSecHeader(envelope);
+        if (secHeader == null) {
+            return null;
+        }
+
+        String samlNameSpace = null;
+        assertionToken = secHeader.getFirstChildWithName(new QName(SAML10_NS, ASSERTION_TOKEN_IN));
+        if (assertionToken != null) {
+            samlNameSpace = SAML10_NS;
+        } else {
+            assertionToken = secHeader.getFirstChildWithName(new QName(SAML11_NS,
+                    ASSERTION_TOKEN_IN));
+            if (assertionToken != null) {
+                samlNameSpace = SAML11_NS;
+            } else {
+                assertionToken = secHeader.getFirstChildWithName(new QName(SAML20_NS,
+                        ASSERTION_TOKEN_IN));
+                if (assertionToken != null) {
+                    samlNameSpace = SAML20_NS;
+                }
+            }
+        }
+
+        if (samlNameSpace == null) {
+            logger.info("Unsupported SAML token type");
+            return null;
+        }
+
+        if (assertionToken != null) {
+            OMElement attributeStatementElem = assertionToken.getFirstChildWithName(new QName(
+                    samlNameSpace, ATTRIBUTE_STATMENT_IN));
+            if (attributeStatementElem != null) {
+                Iterator<OMElement> attributes = null;
+                attributes = attributeStatementElem.getChildrenWithName(new QName(samlNameSpace,
+                        ATTRIBUTE_IN));
+                if (attributes != null) {
+                    Map<String, String> attributeMap;
+                    attributeMap = new HashMap<String, String>();
+                    while (attributes.hasNext()) {
+                        OMElement attr = attributes.next();
+                        OMElement attrValElement = null;
+                        String attributeName = null;
+                        String attributeValue = null;
+                        attributeName = attr.getAttributeValue(new QName(ATTRIBUTE_NS));
+                        attrValElement = attr.getFirstChildWithName(new QName(samlNameSpace,
+                                ATTRIBUTE_VALUE));
+                        attributeValue = attrValElement.getText();
+                        attributeMap.put(attributeName, attributeValue);
+                    }
+                    return attributeMap;
+                }
+            }
+        }
+        return null;
+    }
+
+    private SOAPHeaderBlock getSecHeader(SOAPEnvelope envelope) {
+        SOAPHeader header = envelope.getHeader();
+        if (header != null) {
+            return (SOAPHeaderBlock) header.getFirstChildWithName(SEC_HEADER);
+        }
+        return null;
+    }
+
     public String getProfileIdFromStsIdentifier(String uniqueIdentifier, String issuingSts) {
         // GetProfileIdFromStsIdentifierResponse pid_r = new GetProfileIdFromStsIdentifierResponse();
         String pid = null;
@@ -94,7 +199,11 @@
 	public BuyResponse buy(Buy buy) {
 		CustomOrderBean order;
 		try {
-			order = mgr.buy(buy.getUserID(), buy.getSymbol(), buy.getQuantity());
+            if (buy.getUserID() == null) {
+                order = mgr.buy(getProfileIdFromClaims(), buy.getSymbol(), buy.getQuantity());
+            } else {
+			    order = mgr.buy(buy.getUserID(), buy.getSymbol(), buy.getQuantity());
+            }
 		} catch (DAOException e) {
 			logger.debug("", e);
 			throw new RuntimeException(e);
@@ -107,7 +216,11 @@
 	public GetAccountDataResponse getAccountData(GetAccountData getAccountData) {
 		CustomAccountBean accountData;
 		try {
-			accountData = mgr.getAccountData(getAccountData.getUserID());
+            if (getAccountData.getUserID() == null) {
+                accountData = mgr.getAccountData(getProfileIdFromClaims());
+            } else {
+			    accountData = mgr.getAccountData(getAccountData.getUserID());
+            }
 		} catch (DAOException e) {
 			logger.debug("", e);
 			throw new RuntimeException(e);
@@ -120,7 +233,11 @@
 	public GetAccountProfileDataResponse getAccountProfileData(GetAccountProfileData getAccountProfileData) {
 		CustomAccountProfileBean accountProfileData;
 		try {
-			accountProfileData = mgr.getAccountProfileData(getAccountProfileData.getUserID());
+            if (getAccountProfileData.getUserID() == null) {
+                accountProfileData = mgr.getAccountProfileData(getProfileIdFromClaims());
+            } else {
+			    accountProfileData = mgr.getAccountProfileData(getAccountProfileData.getUserID());
+            }
 		} catch (DAOException e) {
 			logger.debug("", e);
 			throw new RuntimeException(e);
@@ -133,7 +250,11 @@
 	public GetClosedOrdersResponse getClosedOrders(GetClosedOrders getClosedOrders) {
 		List<CustomOrderBean> closedOrders;
 		try {
-			closedOrders = mgr.getClosedOrders(getClosedOrders.getUserID());
+            if (getClosedOrders.getUserID() == null) {
+                closedOrders = mgr.getClosedOrders(getProfileIdFromClaims());
+            } else {
+			    closedOrders = mgr.getClosedOrders(getClosedOrders.getUserID());
+            }
 		} catch (DAOException e) {
 			logger.debug("", e);
 			throw new RuntimeException(e);
@@ -148,7 +269,11 @@
 	public GetHoldingResponse getHolding(GetHolding getHolding) {
 		CustomHoldingBean holding;
 		try {
-			holding = mgr.getHolding(getHolding.getUserID(), getHolding.getHoldingID());
+            if (getHolding.getUserID() == null) {
+                holding = mgr.getHolding(getProfileIdFromClaims(), getHolding.getHoldingID());
+            } else {
+			    holding = mgr.getHolding(getHolding.getUserID(), getHolding.getHoldingID());
+            }
 		} catch (DAOException e) {
 			logger.debug("", e);
 			throw new RuntimeException(e);
@@ -161,7 +286,11 @@
 	public GetHoldingsResponse getHoldings(GetHoldings getHoldings) {
 		List<CustomHoldingBean> holdingBeans;
 		try {
-			holdingBeans = mgr.getHoldings(getHoldings.getUserID());
+            if (getHoldings.getUserID() == null) {
+                holdingBeans = mgr.getHoldings(getProfileIdFromClaims());
+            } else {
+			    holdingBeans = mgr.getHoldings(getHoldings.getUserID());
+            }
 		} catch (DAOException e) {
 			logger.debug("", e);
 			throw new RuntimeException(e);
@@ -189,7 +318,11 @@
 	public GetOrdersResponse getOrders(GetOrders getOrders) {
 		List<CustomOrderBean> orders;
 		try {
-			orders = mgr.getOrders(getOrders.getUserID());
+            if (getOrders.getUserID() == null) {
+                orders = mgr.getOrders(getProfileIdFromClaims());
+            } else {
+			    orders = mgr.getOrders(getOrders.getUserID());
+            }
 		} catch (DAOException e) {
 			logger.debug("", e);
 			throw new RuntimeException(e);
@@ -217,7 +350,11 @@
 	public GetTopOrdersResponse getTopOrders(GetTopOrders getTopOrders) {
 		List<CustomOrderBean> topOrders;
 		try {
-			topOrders = mgr.getTopOrders(getTopOrders.getUserID());
+            if (getTopOrders.getUserID() == null) {
+                topOrders = mgr.getTopOrders(getProfileIdFromClaims());
+            } else {
+			    topOrders = mgr.getTopOrders(getTopOrders.getUserID());
+            }
 		} catch (DAOException e) {
 			logger.debug("", e);
 			throw new RuntimeException(e);
@@ -238,7 +375,11 @@
 	public LoginResponse login(Login login) {
 		CustomAccountBean param;
 		try {
-			param = mgr.login(login.getUserID(), login.getPassword());
+            if (login.getUserID() == null) {
+                param = mgr.login(getProfileIdFromClaims(), login.getPassword());
+            } else {
+			    param = mgr.login(login.getUserID(), login.getPassword());
+            }
 		} catch (DAOException e) {
 			logger.debug("", e);
 			throw new RuntimeException(e);
@@ -250,7 +391,11 @@
 
 	public LogoutResponse logout(Logout logout) {
 		try {
-			mgr.logout(logout.getUserID());
+            if (logout.getUserID() == null) {
+                mgr.logout(getProfileIdFromClaims());
+            } else {
+			    mgr.logout(logout.getUserID());
+            }
 		} catch (DAOException e) {
 			logger.debug("", e);
 			throw new RuntimeException(e);
@@ -262,8 +407,10 @@
 	public RegisterResponse register(Register register) {
 		CustomAccountBean param;
 		try {
+            String userId = (register.getUserID() == null) ? getProfileIdFromClaims()
+                                                            : register.getUserID();
 			param = mgr.register(
-                    register.getUserID(),
+                    userId,
                     register.getPassword(),
 					register.getFullname(),
                     register.getAddress(),
@@ -282,7 +429,11 @@
 	public SellResponse sell(Sell sell) {
 		CustomOrderBean param;
 		try {
-			param = mgr.sell(sell.getUserID(), sell.getHoldingID(), sell.getOrderProcessingMode());
+            if (sell.getUserID() == null) {
+                param = mgr.sell(getProfileIdFromClaims(), sell.getHoldingID(), sell.getOrderProcessingMode());
+            } else {
+			    param = mgr.sell(sell.getUserID(), sell.getHoldingID(), sell.getOrderProcessingMode());
+            }
 		} catch (DAOException e) {
 			logger.debug("", e);
 			throw new RuntimeException(e);
@@ -295,7 +446,11 @@
 	public SellEnhancedResponse sellEnhanced(SellEnhanced sellEnhanced) {
 		CustomOrderBean param;
 		try {
-			param = mgr.sellEnhanced(sellEnhanced.getUserID(), sellEnhanced.getHoldingID(), sellEnhanced.getQuantity());
+            if (sellEnhanced.getUserID() == null) {
+                param = mgr.sellEnhanced(getProfileIdFromClaims(), sellEnhanced.getHoldingID(), sellEnhanced.getQuantity());
+            } else {
+			    param = mgr.sellEnhanced(sellEnhanced.getUserID(), sellEnhanced.getHoldingID(), sellEnhanced.getQuantity());
+            }
 		} catch (DAOException e) {
 			logger.debug("", e);
 			throw new RuntimeException(e);