Actually, I can't get this work... on the client side it's unable to
deserialize the abstract class.... I thought there was someway to have
CXF create a dynamic proxy for it?

Thanks,
James

On Wed, Feb 24, 2010 at 1:56 PM, James Carr <[email protected]> wrote:
> 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