5c099afa7c9361afc2f4477fec0e3018588d7840Allan Foster/**
5c099afa7c9361afc2f4477fec0e3018588d7840Allan Foster * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
5c099afa7c9361afc2f4477fec0e3018588d7840Allan Foster *
5c099afa7c9361afc2f4477fec0e3018588d7840Allan Foster * Copyright (c) 2006 Sun Microsystems Inc. All Rights Reserved
5c099afa7c9361afc2f4477fec0e3018588d7840Allan Foster *
5c099afa7c9361afc2f4477fec0e3018588d7840Allan Foster * The contents of this file are subject to the terms
5c099afa7c9361afc2f4477fec0e3018588d7840Allan Foster * of the Common Development and Distribution License
5c099afa7c9361afc2f4477fec0e3018588d7840Allan Foster * (the License). You may not use this file except in
5c099afa7c9361afc2f4477fec0e3018588d7840Allan Foster * compliance with the License.
5c099afa7c9361afc2f4477fec0e3018588d7840Allan Foster *
5c099afa7c9361afc2f4477fec0e3018588d7840Allan Foster * You can obtain a copy of the License at
5c099afa7c9361afc2f4477fec0e3018588d7840Allan Foster * https://opensso.dev.java.net/public/CDDLv1.0.html or
5c099afa7c9361afc2f4477fec0e3018588d7840Allan Foster * opensso/legal/CDDLv1.0.txt
5c099afa7c9361afc2f4477fec0e3018588d7840Allan Foster * See the License for the specific language governing
5c099afa7c9361afc2f4477fec0e3018588d7840Allan Foster * permission and limitations under the License.
5c099afa7c9361afc2f4477fec0e3018588d7840Allan Foster *
5c099afa7c9361afc2f4477fec0e3018588d7840Allan Foster * When distributing Covered Code, include this CDDL
5c099afa7c9361afc2f4477fec0e3018588d7840Allan Foster * Header Notice in each file and include the License file
5c099afa7c9361afc2f4477fec0e3018588d7840Allan Foster * at opensso/legal/CDDLv1.0.txt.
5c099afa7c9361afc2f4477fec0e3018588d7840Allan Foster * If applicable, add the following below the CDDL Header,
5c099afa7c9361afc2f4477fec0e3018588d7840Allan Foster * with the fields enclosed by brackets [] replaced by
5c099afa7c9361afc2f4477fec0e3018588d7840Allan Foster * your own identifying information:
5c099afa7c9361afc2f4477fec0e3018588d7840Allan Foster * "Portions Copyrighted [year] [name of copyright owner]"
5c099afa7c9361afc2f4477fec0e3018588d7840Allan Foster *
5c099afa7c9361afc2f4477fec0e3018588d7840Allan Foster * $Id: JAXRPCHelper.java,v 1.6 2009/11/16 21:57:47 goodearth Exp $
5c099afa7c9361afc2f4477fec0e3018588d7840Allan Foster *
5c099afa7c9361afc2f4477fec0e3018588d7840Allan Foster */
5c099afa7c9361afc2f4477fec0e3018588d7840Allan Foster
5c099afa7c9361afc2f4477fec0e3018588d7840Allan Foster/*
5c099afa7c9361afc2f4477fec0e3018588d7840Allan Foster * Portions Copyrighted [2010] [ForgeRock AS]
5c099afa7c9361afc2f4477fec0e3018588d7840Allan Foster */
5c099afa7c9361afc2f4477fec0e3018588d7840Allan Foster
5c099afa7c9361afc2f4477fec0e3018588d7840Allan Fosterpackage com.sun.identity.shared.jaxrpc;
5c099afa7c9361afc2f4477fec0e3018588d7840Allan Foster
5c099afa7c9361afc2f4477fec0e3018588d7840Allan Fosterimport com.sun.identity.shared.configuration.SystemPropertiesManager;
5c099afa7c9361afc2f4477fec0e3018588d7840Allan Fosterimport com.sun.identity.shared.debug.Debug;
5c099afa7c9361afc2f4477fec0e3018588d7840Allan Fosterimport java.net.URL;
5c099afa7c9361afc2f4477fec0e3018588d7840Allan Fosterimport java.rmi.RemoteException;
5c099afa7c9361afc2f4477fec0e3018588d7840Allan Fosterimport java.util.Collection;
5c099afa7c9361afc2f4477fec0e3018588d7840Allan Fosterimport java.util.StringTokenizer;
5c099afa7c9361afc2f4477fec0e3018588d7840Allan Foster
5c099afa7c9361afc2f4477fec0e3018588d7840Allan Foster/**
5c099afa7c9361afc2f4477fec0e3018588d7840Allan Foster * The class <code>JAXRPCHelper</code> provides functions to get JAXRPC stubs to
5c099afa7c9361afc2f4477fec0e3018588d7840Allan Foster * a valid Identity Server.
5c099afa7c9361afc2f4477fec0e3018588d7840Allan Foster */
5c099afa7c9361afc2f4477fec0e3018588d7840Allan Fosterpublic class JAXRPCHelper {
5c099afa7c9361afc2f4477fec0e3018588d7840Allan Foster
5c099afa7c9361afc2f4477fec0e3018588d7840Allan Foster // Static constants
5c099afa7c9361afc2f4477fec0e3018588d7840Allan Foster private final static String JAXRPC_URL = "com.sun.identity.jaxrpc.url";
5c099afa7c9361afc2f4477fec0e3018588d7840Allan Foster private final static String JAXRPC_SERVICE = "jaxrpc";
5c099afa7c9361afc2f4477fec0e3018588d7840Allan Foster public final static String SMS_SERVICE = "SMSObjectIF";
5c099afa7c9361afc2f4477fec0e3018588d7840Allan Foster
5c099afa7c9361afc2f4477fec0e3018588d7840Allan Foster // Static variables
5c099afa7c9361afc2f4477fec0e3018588d7840Allan Foster protected static String validRemoteURL;
5c099afa7c9361afc2f4477fec0e3018588d7840Allan Foster protected static boolean serverFailed = true;
5c099afa7c9361afc2f4477fec0e3018588d7840Allan Foster protected static Debug debug = SOAPClient.debug;
5c099afa7c9361afc2f4477fec0e3018588d7840Allan Foster
5c099afa7c9361afc2f4477fec0e3018588d7840Allan Foster /**
5c099afa7c9361afc2f4477fec0e3018588d7840Allan Foster * Returns a valid URL endpoint for the given service name.
5c099afa7c9361afc2f4477fec0e3018588d7840Allan Foster *
5c099afa7c9361afc2f4477fec0e3018588d7840Allan Foster * @param serviceName Service Name.
5c099afa7c9361afc2f4477fec0e3018588d7840Allan Foster * @return a valid URL endpoint for the given service name.
5c099afa7c9361afc2f4477fec0e3018588d7840Allan Foster * @throws RemoteException if there are no valid servers.
5c099afa7c9361afc2f4477fec0e3018588d7840Allan Foster */
5c099afa7c9361afc2f4477fec0e3018588d7840Allan Foster public static String getValidURL(String serviceName)
5c099afa7c9361afc2f4477fec0e3018588d7840Allan Foster throws RemoteException {
5c099afa7c9361afc2f4477fec0e3018588d7840Allan Foster // Validate service name
5c099afa7c9361afc2f4477fec0e3018588d7840Allan Foster if (serviceName == null) {
5c099afa7c9361afc2f4477fec0e3018588d7840Allan Foster throw (new RemoteException("invalid-service-name"));
5c099afa7c9361afc2f4477fec0e3018588d7840Allan Foster }
5c099afa7c9361afc2f4477fec0e3018588d7840Allan Foster
5c099afa7c9361afc2f4477fec0e3018588d7840Allan Foster // Check if there is a valid server
5c099afa7c9361afc2f4477fec0e3018588d7840Allan Foster if (serverFailed) {
5c099afa7c9361afc2f4477fec0e3018588d7840Allan Foster validRemoteURL = getValidServerURL();
5c099afa7c9361afc2f4477fec0e3018588d7840Allan Foster }
5c099afa7c9361afc2f4477fec0e3018588d7840Allan Foster if (validRemoteURL == null) {
5c099afa7c9361afc2f4477fec0e3018588d7840Allan Foster if (debug.warningEnabled()) {
5c099afa7c9361afc2f4477fec0e3018588d7840Allan Foster debug.warning("JAXRPCHelper: No vaild server found");
5c099afa7c9361afc2f4477fec0e3018588d7840Allan Foster }
5c099afa7c9361afc2f4477fec0e3018588d7840Allan Foster throw (new RemoteException("no-server-found"));
5c099afa7c9361afc2f4477fec0e3018588d7840Allan Foster }
5c099afa7c9361afc2f4477fec0e3018588d7840Allan Foster return (validRemoteURL + serviceName);
5c099afa7c9361afc2f4477fec0e3018588d7840Allan Foster }
5c099afa7c9361afc2f4477fec0e3018588d7840Allan Foster
5c099afa7c9361afc2f4477fec0e3018588d7840Allan Foster /**
5c099afa7c9361afc2f4477fec0e3018588d7840Allan Foster * Sets the service to be failed.
5c099afa7c9361afc2f4477fec0e3018588d7840Allan Foster */
5c099afa7c9361afc2f4477fec0e3018588d7840Allan Foster public static void serverFailed(String serviceName) {
5c099afa7c9361afc2f4477fec0e3018588d7840Allan Foster if (validRemoteURL == null) {
5c099afa7c9361afc2f4477fec0e3018588d7840Allan Foster if (debug.warningEnabled()) {
5c099afa7c9361afc2f4477fec0e3018588d7840Allan Foster debug.warning("JAXRPCHelper: No valid server found");
5c099afa7c9361afc2f4477fec0e3018588d7840Allan Foster }
5c099afa7c9361afc2f4477fec0e3018588d7840Allan Foster serverFailed = true;
5c099afa7c9361afc2f4477fec0e3018588d7840Allan Foster } else if (serviceName.startsWith(validRemoteURL)) {
5c099afa7c9361afc2f4477fec0e3018588d7840Allan Foster serverFailed = true;
5c099afa7c9361afc2f4477fec0e3018588d7840Allan Foster }
5c099afa7c9361afc2f4477fec0e3018588d7840Allan Foster }
5c099afa7c9361afc2f4477fec0e3018588d7840Allan Foster
5c099afa7c9361afc2f4477fec0e3018588d7840Allan Foster protected static String getValidServerURL() {
5c099afa7c9361afc2f4477fec0e3018588d7840Allan Foster // Check if the properties has been set
5c099afa7c9361afc2f4477fec0e3018588d7840Allan Foster String servers = SystemPropertiesManager.get(JAXRPC_URL);
5c099afa7c9361afc2f4477fec0e3018588d7840Allan Foster if (servers != null) {
5c099afa7c9361afc2f4477fec0e3018588d7840Allan Foster StringTokenizer st = new StringTokenizer(servers, ",");
5c099afa7c9361afc2f4477fec0e3018588d7840Allan Foster while (st.hasMoreTokens()) {
5c099afa7c9361afc2f4477fec0e3018588d7840Allan Foster String surl = st.nextToken();
5c099afa7c9361afc2f4477fec0e3018588d7840Allan Foster if (!surl.endsWith("/")) {
5c099afa7c9361afc2f4477fec0e3018588d7840Allan Foster surl += "/";
5c099afa7c9361afc2f4477fec0e3018588d7840Allan Foster }
5c099afa7c9361afc2f4477fec0e3018588d7840Allan Foster if (isServerValid(surl)) {
5c099afa7c9361afc2f4477fec0e3018588d7840Allan Foster return (surl);
5c099afa7c9361afc2f4477fec0e3018588d7840Allan Foster }
5c099afa7c9361afc2f4477fec0e3018588d7840Allan Foster }
5c099afa7c9361afc2f4477fec0e3018588d7840Allan Foster } else {
5c099afa7c9361afc2f4477fec0e3018588d7840Allan Foster Collection<URL> serverList = null;
5c099afa7c9361afc2f4477fec0e3018588d7840Allan Foster try {
5c099afa7c9361afc2f4477fec0e3018588d7840Allan Foster serverList = SystemPropertiesManager.getSystemProperties().
5c099afa7c9361afc2f4477fec0e3018588d7840Allan Foster getServiceAllURLs(JAXRPC_SERVICE);
5c099afa7c9361afc2f4477fec0e3018588d7840Allan Foster } catch (Exception e) {
5c099afa7c9361afc2f4477fec0e3018588d7840Allan Foster // Unable to get platform server list
5c099afa7c9361afc2f4477fec0e3018588d7840Allan Foster if (debug.warningEnabled()) {
5c099afa7c9361afc2f4477fec0e3018588d7840Allan Foster debug.warning("JAXRPCHelper:getValidServerURL: "
5c099afa7c9361afc2f4477fec0e3018588d7840Allan Foster + "Unable to get platform server", e);
5c099afa7c9361afc2f4477fec0e3018588d7840Allan Foster }
5c099afa7c9361afc2f4477fec0e3018588d7840Allan Foster return (null);
5c099afa7c9361afc2f4477fec0e3018588d7840Allan Foster }
5c099afa7c9361afc2f4477fec0e3018588d7840Allan Foster
5c099afa7c9361afc2f4477fec0e3018588d7840Allan Foster if (serverList != null) {
5c099afa7c9361afc2f4477fec0e3018588d7840Allan Foster for (URL weburl : serverList) {
5c099afa7c9361afc2f4477fec0e3018588d7840Allan Foster try {
5c099afa7c9361afc2f4477fec0e3018588d7840Allan Foster String surl = weburl.toString();
5c099afa7c9361afc2f4477fec0e3018588d7840Allan Foster if (!surl.endsWith("/")) {
5c099afa7c9361afc2f4477fec0e3018588d7840Allan Foster surl += "/";
5c099afa7c9361afc2f4477fec0e3018588d7840Allan Foster }
5c099afa7c9361afc2f4477fec0e3018588d7840Allan Foster if (isServerValid(surl)) {
5c099afa7c9361afc2f4477fec0e3018588d7840Allan Foster return (surl);
5c099afa7c9361afc2f4477fec0e3018588d7840Allan Foster }
5c099afa7c9361afc2f4477fec0e3018588d7840Allan Foster } catch (Exception e) {
5c099afa7c9361afc2f4477fec0e3018588d7840Allan Foster debug.warning("JAXRPCHelper:getValidServerURL", e);
5c099afa7c9361afc2f4477fec0e3018588d7840Allan Foster }
5c099afa7c9361afc2f4477fec0e3018588d7840Allan Foster }
5c099afa7c9361afc2f4477fec0e3018588d7840Allan Foster }
5c099afa7c9361afc2f4477fec0e3018588d7840Allan Foster }
5c099afa7c9361afc2f4477fec0e3018588d7840Allan Foster return (null);
5c099afa7c9361afc2f4477fec0e3018588d7840Allan Foster }
5c099afa7c9361afc2f4477fec0e3018588d7840Allan Foster
5c099afa7c9361afc2f4477fec0e3018588d7840Allan Foster protected static boolean isServerValid(String url) {
5c099afa7c9361afc2f4477fec0e3018588d7840Allan Foster try {
5c099afa7c9361afc2f4477fec0e3018588d7840Allan Foster if (!url.endsWith(SMS_SERVICE)) {
5c099afa7c9361afc2f4477fec0e3018588d7840Allan Foster url += SMS_SERVICE;
5c099afa7c9361afc2f4477fec0e3018588d7840Allan Foster }
5c099afa7c9361afc2f4477fec0e3018588d7840Allan Foster SOAPClient client = new SOAPClient();
5c099afa7c9361afc2f4477fec0e3018588d7840Allan Foster client.setURL(url);
5c099afa7c9361afc2f4477fec0e3018588d7840Allan Foster client.send(client.encodeMessage("checkForLocal", null),null,null);
5c099afa7c9361afc2f4477fec0e3018588d7840Allan Foster } catch (Exception e) {
5c099afa7c9361afc2f4477fec0e3018588d7840Allan Foster // Server is not valid
5c099afa7c9361afc2f4477fec0e3018588d7840Allan Foster if (debug.messageEnabled()) {
5c099afa7c9361afc2f4477fec0e3018588d7840Allan Foster debug.message("JAXRPCHelper: Connection to URL: " + url
5c099afa7c9361afc2f4477fec0e3018588d7840Allan Foster + " failed", e);
5c099afa7c9361afc2f4477fec0e3018588d7840Allan Foster }
5c099afa7c9361afc2f4477fec0e3018588d7840Allan Foster return (false);
5c099afa7c9361afc2f4477fec0e3018588d7840Allan Foster }
5c099afa7c9361afc2f4477fec0e3018588d7840Allan Foster return (true);
5c099afa7c9361afc2f4477fec0e3018588d7840Allan Foster }
5c099afa7c9361afc2f4477fec0e3018588d7840Allan Foster}