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. >>> >>> >> >
