You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cxf.apache.org by co...@apache.org on 2011/08/04 12:45:38 UTC
svn commit: r1153841 -
/cxf/branches/2.4.x-fixes/rt/ws/security/src/main/java/org/apache/cxf/ws/security/sts/provider/SecurityTokenServiceProvider.java
Author: coheigea
Date: Thu Aug 4 10:45:38 2011
New Revision: 1153841
URL: http://svn.apache.org/viewvc?rev=1153841&view=rev
Log:
Updating the STSProvider to support SOAP 1.2 faults.
Modified:
cxf/branches/2.4.x-fixes/rt/ws/security/src/main/java/org/apache/cxf/ws/security/sts/provider/SecurityTokenServiceProvider.java
Modified: cxf/branches/2.4.x-fixes/rt/ws/security/src/main/java/org/apache/cxf/ws/security/sts/provider/SecurityTokenServiceProvider.java
URL: http://svn.apache.org/viewvc/cxf/branches/2.4.x-fixes/rt/ws/security/src/main/java/org/apache/cxf/ws/security/sts/provider/SecurityTokenServiceProvider.java?rev=1153841&r1=1153840&r2=1153841&view=diff
==============================================================================
--- cxf/branches/2.4.x-fixes/rt/ws/security/src/main/java/org/apache/cxf/ws/security/sts/provider/SecurityTokenServiceProvider.java (original)
+++ cxf/branches/2.4.x-fixes/rt/ws/security/src/main/java/org/apache/cxf/ws/security/sts/provider/SecurityTokenServiceProvider.java Thu Aug 4 10:45:38 2011
@@ -32,18 +32,15 @@ import javax.xml.bind.JAXBElement;
import javax.xml.bind.Unmarshaller;
import javax.xml.bind.util.JAXBSource;
import javax.xml.namespace.QName;
-import javax.xml.soap.SOAPException;
-import javax.xml.soap.SOAPFactory;
-import javax.xml.soap.SOAPFault;
import javax.xml.transform.Source;
import javax.xml.ws.Provider;
import javax.xml.ws.Service;
import javax.xml.ws.ServiceMode;
import javax.xml.ws.WebServiceContext;
-import javax.xml.ws.soap.SOAPFaultException;
+import javax.xml.ws.handler.MessageContext;
-import org.apache.cxf.binding.soap.saaj.SAAJFactoryResolver;
-import org.apache.cxf.interceptor.Fault;
+import org.apache.cxf.binding.soap.SoapFault;
+import org.apache.cxf.binding.soap.SoapVersion;
import org.apache.cxf.jaxb.JAXBContextCache;
import org.apache.cxf.jaxb.JAXBContextCache.CachedContextAndSchemas;
import org.apache.cxf.ws.security.sts.provider.model.ObjectFactory;
@@ -117,7 +114,6 @@ public class SecurityTokenServiceProvide
protected JAXBContext jaxbContext;
protected Set<Class<?>> jaxbContextClasses;
- protected SOAPFactory soapFactory;
private CancelOperation cancelOperation;
private IssueOperation issueOperation;
@@ -134,7 +130,6 @@ public class SecurityTokenServiceProvide
CachedContextAndSchemas cache = JAXBContextCache.getCachedContextAndSchemas(ObjectFactory.class);
jaxbContext = cache.getContext();
jaxbContextClasses = cache.getClasses();
- soapFactory = SAAJFactoryResolver.createSOAPFactory(null);
}
public void setCancelOperation(CancelOperation cancelOperation) {
@@ -222,29 +217,18 @@ public class SecurityTokenServiceProvide
}
} catch (InvocationTargetException ex) {
- try {
- Throwable cause = ex.getCause();
- SOAPFault fault = createSOAPFault(cause);
- throw new SOAPFaultException(fault);
- } catch (SOAPException e1) {
- throw new Fault(e1);
- }
+ Throwable cause = ex.getCause();
+ throw createSOAPFault(cause);
} catch (Exception ex) {
- try {
- SOAPFault fault = createSOAPFault(ex);
- throw new SOAPFaultException(fault);
- } catch (SOAPException e1) {
- throw new Fault(e1);
- }
+ throw createSOAPFault(ex);
}
return response;
}
- private SOAPFault createSOAPFault(Throwable ex) throws SOAPException {
- SOAPFault fault = soapFactory.createFault();
+ private SoapFault createSOAPFault(Throwable ex) {
String faultString = "Internal STS error";
- QName faultCode = fault.getFaultCodeAsQName();
+ QName faultCode = null;
if (ex != null) {
if (ex instanceof STSException && ((STSException)ex).getFaultCode() != null) {
@@ -252,8 +236,18 @@ public class SecurityTokenServiceProvide
}
faultString = ex.getMessage();
}
- fault.setFaultString(faultString);
- fault.setFaultCode(faultCode);
+
+ MessageContext messageContext = context.getMessageContext();
+ SoapVersion soapVersion = (SoapVersion)messageContext.get(SoapVersion.class.getName());
+ SoapFault fault;
+ if (soapVersion.getVersion() == 1.1 && faultCode != null) {
+ fault = new SoapFault(faultString, faultCode);
+ } else {
+ fault = new SoapFault(faultString, soapVersion.getSender());
+ if (soapVersion.getVersion() != 1.1 && faultCode != null) {
+ fault.setSubCode(faultCode);
+ }
+ }
return fault;
}