You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cxf.apache.org by dk...@apache.org on 2011/01/12 19:56:58 UTC
svn commit: r1058275 - in /cxf/branches/2.3.x-fixes: ./
common/common/src/main/java/org/apache/cxf/helpers/
rt/core/src/main/java/org/apache/cxf/interceptor/
rt/ws/policy/src/main/java/org/apache/cxf/ws/policy/
systests/ws-specs/src/test/java/org/apach...
Author: dkulp
Date: Wed Jan 12 18:56:57 2011
New Revision: 1058275
URL: http://svn.apache.org/viewvc?rev=1058275&view=rev
Log:
Merged revisions 1058274 via svnmerge from
https://svn.apache.org/repos/asf/cxf/trunk
........
r1058274 | dkulp | 2011-01-12 13:54:24 -0500 (Wed, 12 Jan 2011) | 2 lines
[CXF-3244] Make sure we pull the policies off the BindingFaultInfo from
the unwrapped version as that's where they are stored.
........
Modified:
cxf/branches/2.3.x-fixes/ (props changed)
cxf/branches/2.3.x-fixes/common/common/src/main/java/org/apache/cxf/helpers/XMLUtils.java
cxf/branches/2.3.x-fixes/rt/core/src/main/java/org/apache/cxf/interceptor/AbstractLoggingInterceptor.java
cxf/branches/2.3.x-fixes/rt/core/src/main/java/org/apache/cxf/interceptor/LoggingInInterceptor.java
cxf/branches/2.3.x-fixes/rt/ws/policy/src/main/java/org/apache/cxf/ws/policy/PolicyEngineImpl.java
cxf/branches/2.3.x-fixes/systests/ws-specs/src/test/java/org/apache/cxf/systest/ws/security/SecurityPolicyTest.java
cxf/branches/2.3.x-fixes/systests/ws-specs/src/test/resources/wsdl_systest_wsspec/DoubleIt.wsdl
Propchange: cxf/branches/2.3.x-fixes/
------------------------------------------------------------------------------
Binary property 'svnmerge-integrated' - no diff available.
Modified: cxf/branches/2.3.x-fixes/common/common/src/main/java/org/apache/cxf/helpers/XMLUtils.java
URL: http://svn.apache.org/viewvc/cxf/branches/2.3.x-fixes/common/common/src/main/java/org/apache/cxf/helpers/XMLUtils.java?rev=1058275&r1=1058274&r2=1058275&view=diff
==============================================================================
--- cxf/branches/2.3.x-fixes/common/common/src/main/java/org/apache/cxf/helpers/XMLUtils.java (original)
+++ cxf/branches/2.3.x-fixes/common/common/src/main/java/org/apache/cxf/helpers/XMLUtils.java Wed Jan 12 18:56:57 2011
@@ -133,7 +133,7 @@ public final class XMLUtils {
public static Document parse(InputSource is) throws ParserConfigurationException, SAXException,
IOException {
- return getParser().parse(is.getSystemId());
+ return getParser().parse(is);
}
public static Document parse(File is) throws ParserConfigurationException, SAXException,
Modified: cxf/branches/2.3.x-fixes/rt/core/src/main/java/org/apache/cxf/interceptor/AbstractLoggingInterceptor.java
URL: http://svn.apache.org/viewvc/cxf/branches/2.3.x-fixes/rt/core/src/main/java/org/apache/cxf/interceptor/AbstractLoggingInterceptor.java?rev=1058275&r1=1058274&r2=1058275&view=diff
==============================================================================
--- cxf/branches/2.3.x-fixes/rt/core/src/main/java/org/apache/cxf/interceptor/AbstractLoggingInterceptor.java (original)
+++ cxf/branches/2.3.x-fixes/rt/core/src/main/java/org/apache/cxf/interceptor/AbstractLoggingInterceptor.java Wed Jan 12 18:56:57 2011
@@ -54,6 +54,9 @@ public abstract class AbstractLoggingInt
public AbstractLoggingInterceptor(String phase) {
super(phase);
}
+ public AbstractLoggingInterceptor(String id, String phase) {
+ super(id, phase);
+ }
public void setOutputLocation(String s) {
if (s == null || "<logger>".equals(s)) {
Modified: cxf/branches/2.3.x-fixes/rt/core/src/main/java/org/apache/cxf/interceptor/LoggingInInterceptor.java
URL: http://svn.apache.org/viewvc/cxf/branches/2.3.x-fixes/rt/core/src/main/java/org/apache/cxf/interceptor/LoggingInInterceptor.java?rev=1058275&r1=1058274&r2=1058275&view=diff
==============================================================================
--- cxf/branches/2.3.x-fixes/rt/core/src/main/java/org/apache/cxf/interceptor/LoggingInInterceptor.java (original)
+++ cxf/branches/2.3.x-fixes/rt/core/src/main/java/org/apache/cxf/interceptor/LoggingInInterceptor.java Wed Jan 12 18:56:57 2011
@@ -43,16 +43,27 @@ public class LoggingInInterceptor extend
public LoggingInInterceptor(String phase) {
super(phase);
}
+ public LoggingInInterceptor(String id, String phase) {
+ super(id, id);
+ }
public LoggingInInterceptor(int lim) {
this();
limit = lim;
}
+ public LoggingInInterceptor(String id, int lim) {
+ this(Phase.RECEIVE, id);
+ limit = lim;
+ }
public LoggingInInterceptor(PrintWriter w) {
this();
this.writer = w;
}
+ public LoggingInInterceptor(String id, PrintWriter w) {
+ this(Phase.RECEIVE, id);
+ this.writer = w;
+ }
public void handleMessage(Message message) throws Fault {
if (writer != null || LOG.isLoggable(Level.INFO)) {
Modified: cxf/branches/2.3.x-fixes/rt/ws/policy/src/main/java/org/apache/cxf/ws/policy/PolicyEngineImpl.java
URL: http://svn.apache.org/viewvc/cxf/branches/2.3.x-fixes/rt/ws/policy/src/main/java/org/apache/cxf/ws/policy/PolicyEngineImpl.java?rev=1058275&r1=1058274&r2=1058275&view=diff
==============================================================================
--- cxf/branches/2.3.x-fixes/rt/ws/policy/src/main/java/org/apache/cxf/ws/policy/PolicyEngineImpl.java (original)
+++ cxf/branches/2.3.x-fixes/rt/ws/policy/src/main/java/org/apache/cxf/ws/policy/PolicyEngineImpl.java Wed Jan 12 18:56:57 2011
@@ -218,6 +218,9 @@ public class PolicyEngineImpl implements
public EffectivePolicy getEffectiveServerFaultPolicy(EndpointInfo ei, BindingFaultInfo bfi,
Destination d) {
+
+ bfi = mapToWrappedBindingFaultInfo(bfi);
+
EffectivePolicy effectivePolicy = (EffectivePolicy)bfi.getProperty(POLICY_INFO_FAULT_SERVER);
if (null == effectivePolicy) {
EffectivePolicyImpl epi = createOutPolicyInfo();
@@ -232,6 +235,18 @@ public class PolicyEngineImpl implements
return effectivePolicy;
}
+ private BindingFaultInfo mapToWrappedBindingFaultInfo(BindingFaultInfo bfi) {
+ BindingOperationInfo boi = bfi.getBindingOperation();
+ if (boi != null && boi.isUnwrapped()) {
+ boi = boi.getWrappedOperation();
+ for (BindingFaultInfo bf2 : boi.getFaults()) {
+ if (bf2.getFaultInfo().getName().equals(bfi.getFaultInfo().getName())) {
+ return bf2;
+ }
+ }
+ }
+ return bfi;
+ }
public void setEffectiveServerFaultPolicy(EndpointInfo ei, BindingFaultInfo bfi, EffectivePolicy ep) {
bfi.setProperty(POLICY_INFO_FAULT_SERVER, ep);
}
Modified: cxf/branches/2.3.x-fixes/systests/ws-specs/src/test/java/org/apache/cxf/systest/ws/security/SecurityPolicyTest.java
URL: http://svn.apache.org/viewvc/cxf/branches/2.3.x-fixes/systests/ws-specs/src/test/java/org/apache/cxf/systest/ws/security/SecurityPolicyTest.java?rev=1058275&r1=1058274&r2=1058275&view=diff
==============================================================================
--- cxf/branches/2.3.x-fixes/systests/ws-specs/src/test/java/org/apache/cxf/systest/ws/security/SecurityPolicyTest.java (original)
+++ cxf/branches/2.3.x-fixes/systests/ws-specs/src/test/java/org/apache/cxf/systest/ws/security/SecurityPolicyTest.java Wed Jan 12 18:56:57 2011
@@ -20,7 +20,9 @@
package org.apache.cxf.systest.ws.security;
import java.io.IOException;
+import java.io.PrintWriter;
import java.io.StringReader;
+import java.io.StringWriter;
import java.math.BigInteger;
import java.util.HashMap;
import java.util.Map;
@@ -40,17 +42,24 @@ import javax.xml.ws.ServiceMode;
import javax.xml.ws.WebServiceProvider;
import javax.xml.xpath.XPathConstants;
+import org.w3c.dom.Attr;
import org.w3c.dom.Document;
import org.w3c.dom.Node;
+import org.xml.sax.InputSource;
+
+import org.apache.cxf.frontend.ClientProxy;
import org.apache.cxf.helpers.XMLUtils;
import org.apache.cxf.helpers.XPathUtils;
+import org.apache.cxf.interceptor.LoggingInInterceptor;
import org.apache.cxf.interceptor.LoggingOutInterceptor;
import org.apache.cxf.jaxws.EndpointImpl;
+import org.apache.cxf.policytest.doubleit.DoubleItFault_Exception;
import org.apache.cxf.policytest.doubleit.DoubleItPortType;
import org.apache.cxf.policytest.doubleit.DoubleItService;
import org.apache.cxf.service.model.EndpointInfo;
import org.apache.cxf.testutil.common.AbstractBusClientServerTestBase;
+import org.apache.cxf.ws.policy.PolicyConstants;
import org.apache.cxf.ws.policy.PolicyEngine;
import org.apache.cxf.ws.security.SecurityConstants;
import org.apache.ws.security.WSPasswordCallback;
@@ -209,6 +218,7 @@ public class SecurityPolicyTest extends
((BindingProvider)pt).getRequestContext().put(SecurityConstants.ENCRYPT_PROPERTIES,
getClass().getResource("bob.properties"));
pt.doubleIt(BigInteger.valueOf(5));
+
pt = service.getDoubleItPortSign();
updateAddressPort(pt, PORT);
@@ -220,7 +230,7 @@ public class SecurityPolicyTest extends
getClass().getResource("bob.properties"));
pt.doubleIt(BigInteger.valueOf(5));
-
+
pt = service.getDoubleItPortSignThenEncrypt();
updateAddressPort(pt, PORT);
((BindingProvider)pt).getRequestContext().put(SecurityConstants.CALLBACK_HANDLER,
@@ -282,6 +292,36 @@ public class SecurityPolicyTest extends
//This should work as it should be properly signed.
assertEquals(BigInteger.valueOf(10), pt.doubleIt(BigInteger.valueOf(5)));
+ StringWriter swriter = new StringWriter();
+ PrintWriter writer = new PrintWriter(swriter);
+ try {
+ ClientProxy.getClient(pt).getInInterceptors()
+ .add(new LoggingInInterceptor("CheckFaultLogging", writer));
+ pt.doubleIt(BigInteger.valueOf(-100));
+ fail("Should have resulted in a DoubleItFault_Exception");
+ } catch (DoubleItFault_Exception ex) {
+ //expected
+ writer.flush();
+ String s = swriter.toString();
+ s = s.substring(s.indexOf("Payload: ") + 9);
+ s = s.substring(0, s.lastIndexOf("Envelope>") + 9);
+ assertTrue("Content wasn't encrypted!", !s.contains("I don't like that."));
+ System.out.println(s);
+ Document d = XMLUtils.parse(new InputSource(new StringReader(s)));
+ Node nd = d.getDocumentElement().getFirstChild();
+ while (nd != null && !"Body".equals(nd.getLocalName())) {
+ nd = nd.getNextSibling();
+ }
+ if (nd == null) {
+ throw ex;
+ }
+ System.out.println(s);
+ Attr val = ((org.w3c.dom.Element)nd)
+ .getAttributeNodeNS(PolicyConstants.WSU_NAMESPACE_URI, "Id");
+ assertNotNull("No wsu:Id, thus, not signed", val);
+ }
+
+
//Try sending a message with the "TimestampOnly" policy into affect to the
//service running the "signed only" policy. This SHOULD fail as the
//body is then not signed.
@@ -327,6 +367,18 @@ public class SecurityPolicyTest extends
assertEquals(XMLUtils.toString(nd), "50", o);
}
+ public abstract static class AbstractDoubleItImpl implements DoubleItPortType {
+ /** {@inheritDoc}*/
+ public BigInteger doubleIt(BigInteger numberToDouble) throws DoubleItFault_Exception {
+ if (numberToDouble.equals(BigInteger.valueOf(-100))) {
+ org.apache.cxf.policytest.doubleit.DoubleItFault f
+ = new org.apache.cxf.policytest.doubleit.DoubleItFault();
+ f.setReason("Number is -100. I don't like that.");
+ throw new DoubleItFault_Exception("DoubleItException.", f);
+ }
+ return numberToDouble.multiply(new BigInteger("2"));
+ }
+ }
@WebService(targetNamespace = "http://cxf.apache.org/policytest/DoubleIt",
@@ -334,11 +386,7 @@ public class SecurityPolicyTest extends
serviceName = "DoubleItService",
endpointInterface = "org.apache.cxf.policytest.doubleit.DoubleItPortType",
wsdlLocation = "classpath:/wsdl_systest_wsspec/DoubleIt.wsdl")
- public static class DoubleItImpl implements DoubleItPortType {
- /** {@inheritDoc}*/
- public BigInteger doubleIt(BigInteger numberToDouble) {
- return numberToDouble.multiply(new BigInteger("2"));
- }
+ public static class DoubleItImpl extends AbstractDoubleItImpl {
}
@WebService(targetNamespace = "http://cxf.apache.org/policytest/DoubleIt",
@@ -346,55 +394,39 @@ public class SecurityPolicyTest extends
serviceName = "DoubleItService",
endpointInterface = "org.apache.cxf.policytest.doubleit.DoubleItPortType",
wsdlLocation = "classpath:/wsdl_systest_wsspec/DoubleIt.wsdl")
- public static class DoubleItImplHttps implements DoubleItPortType {
- /** {@inheritDoc}*/
- public BigInteger doubleIt(BigInteger numberToDouble) {
- return numberToDouble.multiply(new BigInteger("2"));
- }
+ public static class DoubleItImplHttps extends AbstractDoubleItImpl {
}
+
@WebService(targetNamespace = "http://cxf.apache.org/policytest/DoubleIt",
portName = "DoubleItPortEncryptThenSign",
serviceName = "DoubleItService",
endpointInterface = "org.apache.cxf.policytest.doubleit.DoubleItPortType",
wsdlLocation = "classpath:/wsdl_systest_wsspec/DoubleIt.wsdl")
- public static class DoubleItImplEncryptThenSign implements DoubleItPortType {
- /** {@inheritDoc}*/
- public BigInteger doubleIt(BigInteger numberToDouble) {
- return numberToDouble.multiply(new BigInteger("2"));
- }
+ public static class DoubleItImplEncryptThenSign extends AbstractDoubleItImpl {
}
+
@WebService(targetNamespace = "http://cxf.apache.org/policytest/DoubleIt",
portName = "DoubleItPortSignThenEncrypt",
serviceName = "DoubleItService",
endpointInterface = "org.apache.cxf.policytest.doubleit.DoubleItPortType",
wsdlLocation = "classpath:/wsdl_systest_wsspec/DoubleIt.wsdl")
- public static class DoubleItImplSignThenEncrypt implements DoubleItPortType {
- /** {@inheritDoc}*/
- public BigInteger doubleIt(BigInteger numberToDouble) {
- return numberToDouble.multiply(new BigInteger("2"));
- }
+ public static class DoubleItImplSignThenEncrypt extends AbstractDoubleItImpl {
}
+
@WebService(targetNamespace = "http://cxf.apache.org/policytest/DoubleIt",
portName = "DoubleItPortSign",
serviceName = "DoubleItService",
endpointInterface = "org.apache.cxf.policytest.doubleit.DoubleItPortType",
wsdlLocation = "classpath:/wsdl_systest_wsspec/DoubleIt.wsdl")
- public static class DoubleItImplSign implements DoubleItPortType {
- /** {@inheritDoc}*/
- public BigInteger doubleIt(BigInteger numberToDouble) {
- return numberToDouble.multiply(new BigInteger("2"));
- }
+ public static class DoubleItImplSign extends AbstractDoubleItImpl {
}
+
@WebService(targetNamespace = "http://cxf.apache.org/policytest/DoubleIt",
portName = "DoubleItPortXPath",
serviceName = "DoubleItService",
endpointInterface = "org.apache.cxf.policytest.doubleit.DoubleItPortType",
wsdlLocation = "classpath:/wsdl_systest_wsspec/DoubleIt.wsdl")
- public static class DoubleItImplXPath implements DoubleItPortType {
- /** {@inheritDoc}*/
- public BigInteger doubleIt(BigInteger numberToDouble) {
- return numberToDouble.multiply(new BigInteger("2"));
- }
+ public static class DoubleItImplXPath extends AbstractDoubleItImpl {
}
@WebService(targetNamespace = "http://cxf.apache.org/policytest/DoubleIt",
@@ -402,12 +434,9 @@ public class SecurityPolicyTest extends
serviceName = "DoubleItService",
endpointInterface = "org.apache.cxf.policytest.doubleit.DoubleItPortType",
wsdlLocation = "classpath:/wsdl_systest_wsspec/DoubleIt.wsdl")
- public static class DoubleItImplSignOnly implements DoubleItPortType {
- /** {@inheritDoc}*/
- public BigInteger doubleIt(BigInteger numberToDouble) {
- return numberToDouble.multiply(new BigInteger("2"));
- }
+ public static class DoubleItImplSignOnly extends AbstractDoubleItImpl {
}
+
@WebServiceProvider(targetNamespace = "http://cxf.apache.org/policytest/DoubleIt",
portName = "DoubleItPortSignThenEncrypt",
serviceName = "DoubleItService",
@@ -447,22 +476,15 @@ public class SecurityPolicyTest extends
serviceName = "DoubleItService",
endpointInterface = "org.apache.cxf.policytest.doubleit.DoubleItPortType",
wsdlLocation = "classpath:/wsdl_systest_wsspec/DoubleIt.wsdl")
- public static class DoubleItImplCXF3041 implements DoubleItPortType {
- /** {@inheritDoc}*/
- public BigInteger doubleIt(BigInteger numberToDouble) {
- return numberToDouble.multiply(new BigInteger("2"));
- }
+ public static class DoubleItImplCXF3041 extends AbstractDoubleItImpl {
}
+
@WebService(targetNamespace = "http://cxf.apache.org/policytest/DoubleIt",
portName = "DoubleItPortCXF3042",
serviceName = "DoubleItService",
endpointInterface = "org.apache.cxf.policytest.doubleit.DoubleItPortType",
wsdlLocation = "classpath:/wsdl_systest_wsspec/DoubleIt.wsdl")
- public static class DoubleItImplCXF3042 implements DoubleItPortType {
- /** {@inheritDoc}*/
- public BigInteger doubleIt(BigInteger numberToDouble) {
- return numberToDouble.multiply(new BigInteger("2"));
- }
+ public static class DoubleItImplCXF3042 extends AbstractDoubleItImpl {
}
@Test
Modified: cxf/branches/2.3.x-fixes/systests/ws-specs/src/test/resources/wsdl_systest_wsspec/DoubleIt.wsdl
URL: http://svn.apache.org/viewvc/cxf/branches/2.3.x-fixes/systests/ws-specs/src/test/resources/wsdl_systest_wsspec/DoubleIt.wsdl?rev=1058275&r1=1058274&r2=1058275&view=diff
==============================================================================
--- cxf/branches/2.3.x-fixes/systests/ws-specs/src/test/resources/wsdl_systest_wsspec/DoubleIt.wsdl (original)
+++ cxf/branches/2.3.x-fixes/systests/ws-specs/src/test/resources/wsdl_systest_wsspec/DoubleIt.wsdl Wed Jan 12 18:56:57 2011
@@ -42,6 +42,13 @@
</xsd:sequence>
</xsd:complexType>
</xsd:element>
+ <xsd:element name="DoubleItFault">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element name="reason" type="xsd:string" />
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
</xsd:schema>
</wsdl:types>
<wsdl:message name="DoubleItRequest">
@@ -50,10 +57,14 @@
<wsdl:message name="DoubleItResponse">
<wsdl:part element="tns:DoubleItResponse" name="parameters" />
</wsdl:message>
- <wsdl:portType name="DoubleItPortType">
+ <wsdl:message name="DoubleItFault">
+ <wsdl:part element="tns:DoubleItFault" name="fault" />
+ </wsdl:message>
+ <wsdl:portType name="DoubleItPortType">
<wsdl:operation name="DoubleIt">
<wsdl:input message="tns:DoubleItRequest" />
<wsdl:output message="tns:DoubleItResponse" />
+ <wsdl:fault name="DoubleItFault" message="tns:DoubleItFault" />
</wsdl:operation>
</wsdl:portType>
<wsdl:binding name="DoubleItBinding" type="tns:DoubleItPortType">
@@ -68,6 +79,9 @@
<wsdl:output>
<soap:body use="literal" />
</wsdl:output>
+ <wsdl:fault name="DoubleItFault">
+ <soap:body use="literal" name="DoubleItFault" />
+ </wsdl:fault>
</wsdl:operation>
</wsdl:binding>
<wsdl:binding name="DoubleItBindingEncryptThenSign" type="tns:DoubleItPortType">
@@ -82,6 +96,9 @@
<wsdl:output>
<soap:body use="literal" />
</wsdl:output>
+ <wsdl:fault name="DoubleItFault">
+ <soap:body use="literal" name="DoubleItFault" />
+ </wsdl:fault>
</wsdl:operation>
</wsdl:binding>
<wsdl:binding name="DoubleItBindingSignThenEncrypt" type="tns:DoubleItPortType">
@@ -96,6 +113,9 @@
<wsdl:output>
<soap:body use="literal" />
</wsdl:output>
+ <wsdl:fault name="DoubleItFault">
+ <soap:body use="literal" name="DoubleItFault"/>
+ </wsdl:fault>
</wsdl:operation>
</wsdl:binding>
<wsdl:binding name="DoubleItBindingSign" type="tns:DoubleItPortType">
@@ -110,6 +130,9 @@
<wsdl:output>
<soap:body use="literal" />
</wsdl:output>
+ <wsdl:fault name="DoubleItFault">
+ <soap:body use="literal" name="DoubleItFault" />
+ </wsdl:fault>
</wsdl:operation>
</wsdl:binding>
<wsdl:binding name="DoubleItBindingXPath" type="tns:DoubleItPortType">
@@ -124,6 +147,9 @@
<wsdl:output>
<soap:body use="literal" />
</wsdl:output>
+ <wsdl:fault name="DoubleItFault">
+ <soap:body use="literal" name="DoubleItFault" />
+ </wsdl:fault>
</wsdl:operation>
</wsdl:binding>
<wsdl:binding name="DoubleItBindingSignedOnly" type="tns:DoubleItPortType">
@@ -139,6 +165,10 @@
<wsdl:output>
<soap:body use="literal" />
</wsdl:output>
+ <wsdl:fault name="DoubleItFault">
+ <wsp:PolicyReference URI="#EncrBody" />
+ <soap:body use="literal" name="DoubleItFault" />
+ </wsdl:fault>
</wsdl:operation>
</wsdl:binding>
<wsdl:binding name="DoubleItBindingTimestampOnly" type="tns:DoubleItPortType">
@@ -153,6 +183,9 @@
<wsdl:output>
<soap:body use="literal" />
</wsdl:output>
+ <wsdl:fault name="DoubleItFault">
+ <soap:body use="literal" name="DoubleItFault" />
+ </wsdl:fault>
</wsdl:operation>
</wsdl:binding>
@@ -169,6 +202,9 @@
<wsp:PolicyReference URI="#SignBody"/>
<soap:body use="literal" />
</wsdl:output>
+ <wsdl:fault name="DoubleItFault">
+ <soap:body use="literal" name="DoubleItFault" />
+ </wsdl:fault>
</wsdl:operation>
</wsdl:binding>
<wsdl:binding name="DoubleItBindingCXF3042" type="tns:DoubleItPortType">
@@ -184,6 +220,9 @@
<wsdl:output>
<soap:body use="literal" />
</wsdl:output>
+ <wsdl:fault name="DoubleItFault">
+ <soap:body use="literal" name="DoubleItFault" />
+ </wsdl:fault>
</wsdl:operation>
</wsdl:binding>