nvm... figured it out

On Wed, Feb 24, 2010 at 1:38 PM, James Carr <[email protected]> wrote:
> I want to return objects that have JPA annotations on them from a
> service, but dont want the JPA annotations in the client object
> (stored in a shared module). Is there a way to use an abstrac class or
> interface?
>
> Thanks,
> James
>
> On Wed, Feb 24, 2010 at 1:33 PM, PrSd <[email protected]> wrote:
>>
>> Hello,
>>
>> I am injecting a SAML Assertion in a SOAP Header from the SOAPClient and
>> then issuing a service request to a CXF webservice. On the service end I
>> have a JAX WS SOAP Handler that intercepts and unmarshals the header. The
>> client and service handlers are from Glen Mazza's weblog.
>> http://www.jroller.com/gmazza/entry/using_the_opensaml_library_in
>>
>> I am still including them incase any customary changes I may have made
>> messed up something. So here it is
>>
>> ------------------------------------------------------------------------------------------------------
>> SOAPClient:
>> ------------------------------------------------------------------------------------------------------
>> package com.hsc.security.saml.soap;
>>
>> import java.io.IOException;
>> import java.net.MalformedURLException;
>> import java.net.URL;
>>
>> import java.util.ArrayList;
>> import java.util.List;
>> import java.util.Map;
>> import java.util.Properties;
>> import java.util.Set;
>> import javax.xml.namespace.QName;
>> import javax.xml.soap.SOAPElement;
>> import javax.xml.soap.SOAPEnvelope;
>> import javax.xml.soap.SOAPHeader;
>> import javax.xml.soap.SOAPMessage;
>> import javax.xml.ws.BindingProvider;
>> import javax.xml.ws.Service;
>> import javax.xml.ws.handler.MessageContext;
>> import javax.xml.ws.handler.soap.SOAPHandler;
>> import javax.xml.ws.handler.soap.SOAPMessageContext;
>> import javax.xml.ws.soap.SOAPBinding;
>>
>> import com.syscom.hsc.web.IBpmService;
>>
>> public class SpringWSClient {
>>
>>        String wsdlString =
>> "http://localhost:9088/bpm-servicesCXF/services/IBpmService";;
>>         //String wsdlString =
>> "http://localhost:9088/bpm-servicesCXF/services/IBpmService?wsdl=IBpmService.wsdl";;
>>          private static final QName SERVICE_NAME
>>      = new QName("http://web.hsc.syscom.com";, "BPMWebService");
>>
>>           private static final QName PORT_NAME
>>       = new QName("http://web.hsc.syscom.com";, "BpmServicePort");
>>
>>
>>
>>
>>        public static String xmlFileNamePath =  "BpmServices.xml";
>>
>>        public static void main(String [] args){
>>
>>                SpringWSClient ws = new SpringWSClient();
>>                System.out.println("Starting SOAP request");
>>                Service service = Service.create(SERVICE_NAME);
>>
>>                //BPMWebService bpmServices = new BPMWebService(SERVICE_NAME);
>>                HeaderHandlerResolver handlerResolver = new  
>> HeaderHandlerResolver();
>>                service.setHandlerResolver(handlerResolver);
>>
>>
>>                // Endpoint Address
>>                String endpointAddress =
>> "http://localhost:9088/bpm-servicesCXF/services/IBpmService";;
>>                try {
>>                        java.net.URL url = new URL(endpointAddress);
>>                } catch (MalformedURLException e1) {
>>                        // TODO Auto-generated catch block
>>                        e1.printStackTrace();
>>                }
>>
>>                // Add a port to the Service
>>
>>                IBpmService client = service.getPort(IBpmService.class);
>>
>>                Map<String, Object> requestContext =
>> ((BindingProvider)client).getRequestContext();
>>                requestContext.put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY,
>> endpointAddress);
>>                requestContext.put(BindingProvider.SESSION_MAINTAIN_PROPERTY,
>> Boolean.TRUE);
>>
>>                String username = "kpham";
>>         String password = "hdfuhgdg";
>>         String category = "GETFULLEOPINWRK";
>>                 int max = -1;
>>                 Properties arguments = null;
>>                String response =null;
>>                try {
>>                        response = 
>> client.findTaskListUsingLoginCreds(username, password,
>> category, arguments, max);
>>                        //response = client.findTaskList(category, arguments, 
>> max);
>>
>>                        System.out.println("Response: " + response);
>>                } catch (Exception e) {
>>                        // TODO Auto-generated catch block
>>                        e.printStackTrace();
>>                }
>>
>>
>>        }
>>
>> ------------------------------------------------------------------------------------------------------
>> ClientSAMLHandler
>> ------------------------------------------------------------------------------------------------------
>> public class ClientSAMLHandler implements SOAPHandler<SOAPMessageContext> {
>>
>>   // change this to redirect output if desired
>>   private static PrintStream out = System.out;
>>
>>   public static final String WS_SECURITY_NS_URI =
>>
>> "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd";;
>>
>>   private static final Set<QName> HEADERS = new HashSet<QName>();
>> /*   static {
>>          HEADERS.add(new QName(WSConstants.WSSE_NS, "Security"));
>>          HEADERS.add(new QName(WSConstants.WSSE11_NS, "Security"));
>>          HEADERS.add(new QName(WSConstants.ENC_NS, "EncryptedData"));
>>
>>      }
>> */
>>   public Set getHeaders() {
>>    //return HEADERS;
>>           return null;
>>   }
>>
>>   public boolean handleMessage(SOAPMessageContext smc) {
>>      Boolean outboundProperty = (Boolean)
>> smc.get(MessageContext.MESSAGE_OUTBOUND_PROPERTY);
>>
>>      if (outboundProperty.booleanValue()) {
>>         out.println("(debug) Adding SAML token to outbound message from
>> client");
>>         System.out.println("(debug) Adding SAML token to outbound message
>> from client");
>>
>>         try {
>>            DefaultBootstrap.bootstrap();
>>            SOAPMessage message = smc.getMessage();
>>            SOAPPart soapPart = message.getSOAPPart();
>>            SOAPEnvelope soapEnvelope = soapPart.getEnvelope();
>>            Name wsseHeaderName = soapEnvelope.createName("Security",
>>                  "wsse", WS_SECURITY_NS_URI);
>>            if (soapEnvelope.getHeader() == null) {
>>               soapEnvelope.addHeader();
>>            }
>>            SOAPHeaderElement securityElement = soapEnvelope.getHeader()
>>                  .addHeaderElement(wsseHeaderName);
>>
>>            AssertionBuilder ab = new AssertionBuilder();
>>            Assertion assertion = ab.buildObject();
>>            assertion.setVersion(SAMLVersion.VERSION_20);
>>            assertion.setID("123"); // in reality, must be unique for all
>> assertions
>>            assertion.setIssueInstant(new DateTime());
>>
>>            IssuerBuilder ib = new IssuerBuilder();
>>            Issuer myIssuer = ib.buildObject();
>>            myIssuer.setValue("http://localhost:9088";);
>>            assertion.setIssuer(myIssuer);
>>
>>            SubjectBuilder sb = new SubjectBuilder();
>>            Subject mySubject = sb.buildObject();
>>            NameIDBuilder nb = new NameIDBuilder();
>>            NameID myNameID = nb.buildObject();
>>            myNameID.setValue("p8admin");
>>            myNameID.setFormat(NameIdentifier.X509_SUBJECT);
>>            mySubject.setNameID(myNameID);
>>            assertion.setSubject(mySubject);
>>
>>            // user authenticated via X509 token
>>            AuthnStatementBuilder asb = new AuthnStatementBuilder();
>>            AuthnStatement myAuthnStatement = asb.buildObject();
>>            myAuthnStatement.setAuthnInstant(new DateTime());
>>            AuthnContextBuilder acb = new AuthnContextBuilder();
>>            AuthnContext myACI = acb.buildObject();
>>            AuthnContextClassRefBuilder accrb = new
>> AuthnContextClassRefBuilder();
>>            AuthnContextClassRef accr = accrb.buildObject();
>>            accr.setAuthnContextClassRef(AuthnContext.X509_AUTHN_CTX);
>>            myACI.setAuthnContextClassRef(accr);
>>            myAuthnStatement.setAuthnContext(myACI);
>>            assertion.getAuthnStatements().add(myAuthnStatement);
>>
>>            // user can double even numbers
>>            AuthzDecisionStatementBuilder adsb = new
>> AuthzDecisionStatementBuilder();
>>            AuthzDecisionStatement ads = adsb.buildObject();
>>            ads.setDecision(DecisionTypeEnumeration.PERMIT);
>>            ads.setResource("DoubleIt");
>>            ActionBuilder actb = new ActionBuilder();
>>            Action act = actb.buildObject();
>>            // arbitrary unique tag to define "namespace" of action
>>            // note SAML actions not defined in an XSD -- XAMCL normally
>> used instead
>>            act.setNamespace("urn:doubleit:doubleitactions");
>>            act.setAction("DoubleEvenNumbers");
>>            ads.getActions().add(act);
>>            assertion.getAuthzDecisionStatements().add(ads);
>>
>>            // user has math degree
>>            AttributeStatementBuilder attstmtb = new
>> AttributeStatementBuilder();
>>            AttributeStatement attstmt = attstmtb.buildObject();
>>            AttributeBuilder attbldr = new AttributeBuilder();
>>            Attribute attr = attbldr.buildObject();
>>            attr.setName("degree");
>>            attr.setNameFormat("http://www.example.org/DoubleIt/Security";);
>>            XSStringBuilder stringBuilder = (XSStringBuilder) Configuration
>>                  .getBuilderFactory().getBuilder(XSString.TYPE_NAME);
>>            XSString stringValue = stringBuilder
>>                  .buildObject(AttributeValue.DEFAULT_ELEMENT_NAME,
>>                        XSString.TYPE_NAME);
>>            stringValue.setValue("Mathematics");
>>            attr.getAttributeValues().add(stringValue);
>>            attstmt.getAttributes().add(attr);
>>            assertion.getAttributeStatements().add(attstmt);
>>
>>            // marshall Assertion Java class into XML
>>            MarshallerFactory marshallerFactory = Configuration
>>                  .getMarshallerFactory();
>>            Marshaller marshaller = marshallerFactory
>>                  .getMarshaller(assertion);
>>            Element assertionElement = marshaller.marshall(assertion);
>>            securityElement.appendChild(soapPart.importNode(
>>                  assertionElement, true));
>>
>>            //Print out the outbound SOAP message to System.out
>>            message.writeTo(System.out);
>>            System.out.println("");
>>
>>         } catch (Exception e) {
>>            e.printStackTrace();
>>         }
>>      }
>>      else{
>>          try {
>>
>>              //This handler does nothing with the response from the Web
>> Service so
>>              //we just print out the SOAP message.
>>              SOAPMessage message = smc.getMessage();
>>              message.writeTo(System.out);
>>              System.out.println("");
>>
>>          } catch (Exception ex) {
>>              ex.printStackTrace();
>>          }
>>      }
>>      return true;
>>   }
>>
>>   public boolean handleFault(SOAPMessageContext smc) {
>>      out.println("Exception in Client handler: ");
>>      SOAPMessage message = smc.getMessage();
>>      try {
>>         message.writeTo(out);
>>         out.println(""); // just to add a newline
>>      } catch (Exception e) {
>>         out.println("Unable to write exception for exception: "
>>            + e.toString());
>>      }
>>      return true;
>>   }
>>
>>   // nothing to clean up
>>   public void close(MessageContext messageContext) {
>>   }
>>
>> }
>>
>>
>> }
>>
>> The SOAP Client then issues the service request, the Service JAX WS Handler
>> intercepts the incoming message. The handleMessage is invoked, however I see
>> a SOAPFaultException being thrown -
>> ------------------------------------------------------------------------------------------------------
>> [2/24/10 14:10:33:974 EST] 00000022 HandlerChainI 1   invoking handlers,
>> direction: inbound
>> [2/24/10 14:10:33:974 EST] 00000022 HandlerChainI 1   invoking handler of
>> type com.syscom.hsc.web.soap.ServiceSAMLHandler
>> [2/24/10 14:10:33:974 EST] 00000022 SystemOut     O   Inside handleMessage
>> ---->
>> [2/24/10 14:10:33:974 EST] 00000022 SystemOut     O   Inside handleMessage
>> ----> outboundProperty.booleanValue() false
>> [2/24/10 14:10:33:974 EST] 00000022 SystemOut     O   Inside handleMessage
>> ----> sh.toString()[soap:Header: null]
>> [2/24/10 14:10:33:974 EST] 00000022 SystemOut     O   Inside handleMessage
>> ----> wsseElement.getLocalName()Security
>> [2/24/10 14:10:33:974 EST] 00000022 SystemOut     O   Inside handleMessage
>> ---->
>> wsseElement.getNamespaceURI()http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd
>> [2/24/10 14:10:33:974 EST] 00000022 SystemOut     O   Inside handleMessage
>> ----> assertionElement.getLocalName()Assertion
>> [2/24/10 14:10:33:974 EST] 00000022 SystemOut     O   Inside handleMessage
>> ---->
>> assertionElement.getNamespaceURI()urn:oasis:names:tc:SAML:2.0:assertion
>> [2/24/10 14:10:34:224 EST] 00000022 Configuration W
>> org.opensaml.xml.Configuration validateJCEProviders The JCE providers
>> currently configured in the JVM do not support
>> required capabilities for XML Encryption, either the 'AES' cipher algorithm
>> or the 'ISO10126Padding' padding scheme
>>
>> handleMessage raised exception
>>                                 javax.xml.ws.soap.SOAPFaultException:
>> Internal Error: local part cannot be "null" when creating a QName
>>        at
>> com.syscom.hsc.web.soap.ServiceSAMLHandler.createSOAPFaultException(ServiceSAMLHandler.java:253)
>>        at
>> com.syscom.hsc.web.soap.ServiceSAMLHandler.handleMessage(ServiceSAMLHandler.java:234)
>>        at
>> com.syscom.hsc.web.soap.ServiceSAMLHandler.handleMessage(ServiceSAMLHandler.java:1)
>>        at
>> org.apache.cxf.jaxws.handler.HandlerChainInvoker.invokeHandleMessage(HandlerChainInvoker.java:335)
>>        at
>> org.apache.cxf.jaxws.handler.HandlerChainInvoker.invokeHandlerChain(HandlerChainInvoker.java:253)
>>        at
>> org.apache.cxf.jaxws.handler.HandlerChainInvoker.invokeProtocolHandlers(HandlerChainInvoker.java:131)
>> .-----------------------------------------------------------------------------------------------------
>>
>>
>>
>>
>> Here is the ServiceHandler
>> ------------------------------------------------------------------------------------------------------
>> SAMLServiceHandler
>> ------------------------------------------------------------------------------------------------------
>> package com.syscom.hsc.web.soap;
>> import java.io.PrintStream;
>> import java.util.HashSet;
>> import java.util.Iterator;
>> import java.util.List;
>> import java.util.Set;
>>
>> import javax.annotation.PostConstruct;
>> import javax.annotation.PreDestroy;
>> import javax.xml.namespace.QName;
>> import javax.xml.soap.SOAPBody;
>> import javax.xml.soap.SOAPConstants;
>> import javax.xml.soap.SOAPException;
>> import javax.xml.soap.SOAPFactory;
>> import javax.xml.soap.SOAPFault;
>> import javax.xml.soap.SOAPHeader;
>> import javax.xml.soap.SOAPMessage;
>> import javax.xml.ws.handler.MessageContext;
>> import javax.xml.ws.handler.soap.SOAPHandler;
>> import javax.xml.ws.handler.soap.SOAPMessageContext;
>> import javax.xml.ws.soap.SOAPFaultException;
>>
>> import org.apache.ws.security.WSConstants;
>> import org.opensaml.Configuration;
>> import org.opensaml.DefaultBootstrap;
>> import org.opensaml.saml2.core.Action;
>> import org.opensaml.saml2.core.Assertion;
>> import org.opensaml.saml2.core.Attribute;
>> import org.opensaml.saml2.core.AttributeStatement;
>> import org.opensaml.saml2.core.AuthnContext;
>> import org.opensaml.saml2.core.AuthnStatement;
>> import org.opensaml.saml2.core.AuthzDecisionStatement;
>> import org.opensaml.xml.XMLObject;
>> import org.opensaml.xml.io.Unmarshaller;
>> import org.opensaml.xml.io.UnmarshallerFactory;
>> import org.w3c.dom.Element;
>> import org.w3c.dom.Node;
>>
>> import org.opensaml.common.xml.SAMLConstants;
>>
>> import com.syscom.hsc.web.security.saml.SAMLCredential;
>>
>> /*
>>  * This sample SOAP Protocol Handler for DoubleIt checks for X.509
>> authentication,
>>  * attribute of Math degree, and authorization to double even numbers.
>>  */
>> public class ServiceSAMLHandler implements SOAPHandler<SOAPMessageContext> {
>>
>>   // change this to redirect output if desired
>>   private static PrintStream out = System.out;
>>
>>   private static String WS_SECURITY_URI =
>>
>> "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd";;
>>   private static final String HANDLER_NAME = "ServiceSAMLHandler";
>>
>>
>>   private static final Set<QName> HEADERS = new HashSet<QName>();
>>  /*  static {
>>       HEADERS.add(new QName(WSConstants.WSSE_NS, "Security"));
>>       HEADERS.add(new QName(WSConstants.WSSE11_NS, "Security"));
>>       HEADERS.add(new QName(WSConstants.ENC_NS, "EncryptedData"));
>>   }
>> */
>>   @PostConstruct
>>   public void init() {
>>      out.println("------------------------------------");
>>      out.println("In Handler " + HANDLER_NAME + ":init()");
>>      out.println("Exiting Handler " + HANDLER_NAME + ":init()");
>>      out.println("------------------------------------");
>>   }
>>
>>   @PreDestroy
>>   public void destroy() {
>>      out.println("------------------------------------");
>>      out.println("In Handler " + HANDLER_NAME + ":destroy()");
>>      out.println("Exiting Handler " + HANDLER_NAME + ":destroy()");
>>      out.println("------------------------------------");
>>   }
>>
>>
>>   public Set <QName> getHeaders() {
>>      //return HEADERS;
>>           return null;
>>   }
>>
>>   public boolean handleMessage(SOAPMessageContext smc) {
>>           out.println("Inside handleMessage ----> ");
>>           Boolean outboundProperty = (Boolean) smc
>>            .get(MessageContext.MESSAGE_OUTBOUND_PROPERTY);
>>
>>
>>      if (!outboundProperty.booleanValue()) {
>>           out.println("Inside handleMessage ---->
>> outboundProperty.booleanValue() "+outboundProperty.booleanValue());
>>           logToSystemOut(smc);
>>          Element assertionElement;
>>
>>         try {
>>            // check for SOAP Header
>>            SOAPHeader sh = smc.getMessage().getSOAPHeader();
>>            out.println("Inside handleMessage ---->
>> sh.toString()"+sh.toString());
>>            if (sh == null) {
>>               throw createSOAPFaultException("Missing SOAP Header", true);
>>            }
>>
>>            // check for wsse:security element under SOAP Header
>>            Node wsseElement = sh.getFirstChild();
>>            out.println("Inside handleMessage ---->
>> wsseElement.getLocalName()"+wsseElement.getLocalName());
>>            out.println("Inside handleMessage ---->
>> wsseElement.getNamespaceURI()"+wsseElement.getNamespaceURI());
>>
>>            if (wsseElement == null ||
>> !"Security".equals(wsseElement.getLocalName())
>>                  || !WS_SECURITY_URI.equals(wsseElement.getNamespaceURI()))
>> {
>>               throw createSOAPFaultException("Missing or invalid
>> WS-Security Header",
>>                     true);
>>            }
>>
>>            // check for SAML assertion under wsse:security element
>>            assertionElement = (Element) wsseElement.getFirstChild();
>>
>>            out.println("Inside handleMessage ---->
>> assertionElement.getLocalName()"+assertionElement.getLocalName());
>>            out.println("Inside handleMessage ---->
>> assertionElement.getNamespaceURI()"+assertionElement.getNamespaceURI());
>>            if (assertionElement == null
>>                  || !"Assertion".equals(assertionElement.getLocalName())
>>                  ||
>> !SAMLConstants.SAML20_NS.equals(assertionElement.getNamespaceURI())) {
>>               throw createSOAPFaultException("Missing or invalid SAML
>> Assertion", true);
>>            }
>>
>>            // Unmarshall SAML Assertion into an OpenSAML Java object.
>>            DefaultBootstrap.bootstrap();
>>            UnmarshallerFactory unmarshallerFactory = Configuration
>>                  .getUnmarshallerFactory();
>>            Unmarshaller unmarshaller = unmarshallerFactory
>>                  .getUnmarshaller(assertionElement);
>>            Assertion samlAssertion = (Assertion) unmarshaller
>>                  .unmarshall(assertionElement);
>>
>>            /*
>>             * Below code works with OpenSAML API to check Authentication,
>>             * Authorization, and attributes. Using the XPath API with the
>>             * assertionElement above would probably be an easier and more
>>             * readable option.
>>             */
>>            //Check for Subject
>>            out.println("Subject from Service
>> Handler"+samlAssertion.getSubject().getNameID().getValue());
>>            //SAMLCredential samlCred = new
>> SAMLCredential(samlAssertion.getSubject().getNameID(), samlAssertion);
>>
>> SAMLCredential.setNameID(samlAssertion.getSubject().getNameID());
>>            SAMLCredential.setAuthenticationAssertion(samlAssertion);
>>
>>
>>            // Check for X509 authentication, error otherwise
>>            List authStmtList = samlAssertion.getAuthnStatements();
>>            if (authStmtList == null || authStmtList.size() < 1
>>                  || authStmtList.size() > 1) {
>>               throw createSOAPFaultException("Missing Authentication
>> Statement.", true);
>>            } else {
>>               AuthnStatement authStmt = (AuthnStatement)
>> authStmtList.get(0);
>>               if
>> (!AuthnContext.X509_AUTHN_CTX.equals(authStmt.getAuthnContext()
>>                     .getAuthnContextClassRef().getAuthnContextClassRef()))
>> {
>>                  throw createSOAPFaultException("Only X.509 authentication
>> supported.",
>>                        true);
>>               }
>>            }
>>
>>            // Check if math degree, error otherwise
>>            List asList = samlAssertion.getAttributeStatements();
>>         /*   if (asList == null || asList.size() == 0) {
>>               throw createSOAPFaultException("Degree/Major is missing.",
>> true);
>>            } else {
>>               boolean hasMathDegree = false;
>>               for (Iterator it = asList.iterator(); it.hasNext();) {
>>                  AttributeStatement as = it.next();
>>                  List attList = as.getAttributes();
>>                  if (attList == null || attList.size() == 0) {
>>                     throw createSOAPFaultException("Degree/major is
>> missing.", true);
>>                  } else {
>>                     for (Iterator it2 = attList.iterator(); it2.hasNext();)
>> {
>>                        Attribute att = it2.next();
>>                        if (!att.getName().equals("degree")) {
>>                           continue;
>>                        } else {
>>                           List xoList = att.getAttributeValues();
>>                           if (xoList == null || xoList.size() < 1 ||
>> xoList.size() > 1) {
>>                              throw createSOAPFaultException("Degree/major
>> is missing.",
>>                                    true);
>>                           } else {
>>                              XMLObject xmlObj = xoList.get(0);
>>                              if
>> (xmlObj.getDOM().getFirstChild().getTextContent()
>>                                    .equals("Mathematics")) {
>>                                 hasMathDegree = true;
>>                              }
>>                           }
>>                        }
>>                     }
>>                  }
>>               }
>>               if (hasMathDegree == false) {
>>                  throw createSOAPFaultException(
>>                        "Must have Mathematics degree to run DoubleIt.",
>> true);
>>               }
>>            }
>> *
>>            // If even number being doubled, make sure user has permission
>>            SOAPBody sb = smc.getMessage().getSOAPBody();
>>
>>            if (sb.getFirstChild() == null ||
>> sb.getFirstChild().getFirstChild() == null) {
>>               throw createSOAPFaultException("Invalid SOAP Body", true);
>>            } else {
>>               Integer intValue = new
>> Integer(sb.getFirstChild().getFirstChild()
>>                     .getTextContent());
>>               if ((intValue.intValue() % 2) == 0) { // if even
>>                  List adsList = samlAssertion
>>                        .getAuthzDecisionStatements();
>>                  if (adsList == null || adsList.size() < 1 ||
>> adsList.size() > 1) {
>>                     throw createSOAPFaultException(
>>                           "Missing or invalid Authorization Decision
>> Statement", true);
>>                  } else {
>>                     Boolean canDoubleEven = false;
>>                     AuthzDecisionStatement ads = (AuthzDecisionStatement)
>> adsList.get(0);
>>                     List actList = ads.getActions();
>>                     for (Iterator it = actList.iterator(); it.hasNext();) {
>>                        Action action = (Action) it.next();
>>                        if ("DoubleEvenNumbers".equals(action.getAction()))
>> {
>>                           canDoubleEven = true;
>>                           break;
>>                        }
>>                     }
>>                     if (canDoubleEven == false) {
>>                        throw createSOAPFaultException(
>>                              "Missing authorization to double even
>> numbers.", true);
>>                     }
>>                  }
>>               }
>>            }*/
>>         } catch (Exception e) {
>>            throw createSOAPFaultException("Internal Error: " +
>> e.getMessage(), false);
>>         }
>>      }
>>      return true;
>>   }
>>
>>   /*
>>    * Convenience function used to generate a generic SOAPFaultException
>>    */
>>   private SOAPFaultException createSOAPFaultException(String faultString,
>>         Boolean clientFault) {
>>      try {
>>          System.out.println("*********clientFault***********"+clientFault);
>>         String faultCode = clientFault ? "Client" : "Server";
>>         System.out.println("*********faultCode***********"+faultCode);
>>         SOAPFault fault = SOAPFactory.newInstance().createFault();
>>         System.out.println("*********faultString***********"+faultString);
>>         fault.setFaultString(faultString);
>>         fault.setFaultCode(new QName(SOAPConstants.URI_NS_SOAP_ENVELOPE,
>> faultCode));
>>         return new SOAPFaultException(fault);
>>      } catch (SOAPException e) {
>>         throw new RuntimeException("Error creating SOAP Fault message,
>> faultString: "
>>               + faultString);
>>      }
>>   }
>>
>>   public boolean handleFault(SOAPMessageContext smc) {
>>
>>           out.println("------------------------------------");
>>              out.println("In Handler " + HANDLER_NAME + ":handleFault()");
>>              logToSystemOut(smc);
>>              out.println("Exiting Handler " + HANDLER_NAME + 
>> ":handleFault()");
>>              out.println("------------------------------------");
>>
>>      return true;
>>   }
>>
>>   // nothing to clean up
>>   public void close(MessageContext messageContext) {
>>           out.println("------------------------------------");
>>              out.println("In Handler " + HANDLER_NAME + ":close()");
>>              out.println("Exiting Handler " + HANDLER_NAME + ":close()");
>>              out.println("------------------------------------");
>>
>>   }
>>
>>   /*
>>    * Check the MESSAGE_OUTBOUND_PROPERTY in the context to see if this is
>> an
>>    * outgoing or incoming message. Write a brief message to the print
>> stream
>>    * and output the message. The writeTo() method can throw SOAPException
>> or
>>    * IOException
>>    */
>>   private void logToSystemOut(SOAPMessageContext smc) {
>>      Boolean outboundProperty = (Boolean) smc
>>            .get(MessageContext.MESSAGE_OUTBOUND_PROPERTY);
>>
>>      if (outboundProperty.booleanValue()) {
>>         out.println("\nIncoming message to web service provider:");
>>      } else {
>>         out.println("\nOutgoing message from web service provider:");
>>      }
>>
>>      SOAPMessage message = smc.getMessage();
>>      try {
>>         message.writeTo(out);
>>         out.println(""); // just to add a newline
>>      } catch (Exception e) {
>>         out.println("Exception in handler: " + e);
>>      }
>>   }
>>
>> }
>>
>> I am not sure what the local part here is and how can I circumvent it from
>> being Null. Any clue or suggestions will be well appreciated.
>>
>>
>>
>>
>> --
>> View this message in context: 
>> http://old.nabble.com/local-part-cannot-be-%22null%22-when-creating-a-QName-tp27714287p27714287.html
>> Sent from the cxf-user mailing list archive at Nabble.com.
>>
>>
>

Reply via email to