package at.gv.egovernment.moa.id.auth.modules.ehvd.test.tasks; import static org.hamcrest.CoreMatchers.instanceOf; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertTrue; import static org.junit.Assert.fail; import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.when; import java.util.Arrays; import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Locale; import java.util.Map; import javax.xml.namespace.QName; import javax.xml.soap.Detail; import javax.xml.soap.Name; import javax.xml.soap.SOAPElement; import javax.xml.soap.SOAPException; import javax.xml.soap.SOAPFault; import javax.xml.ws.soap.SOAPFaultException; import org.apache.commons.lang3.RandomStringUtils; import org.junit.Before; import org.junit.Rule; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.mock.web.MockHttpServletRequest; import org.springframework.mock.web.MockHttpServletResponse; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; import org.springframework.util.Assert; import org.springframework.web.context.request.RequestContextHolder; import org.springframework.web.context.request.ServletRequestAttributes; import org.w3c.dom.Attr; import org.w3c.dom.DOMException; import org.w3c.dom.Document; import org.w3c.dom.NamedNodeMap; import org.w3c.dom.Node; import org.w3c.dom.NodeList; import org.w3c.dom.TypeInfo; import org.w3c.dom.UserDataHandler; import com.github.skjolber.mockito.soap.Soap12EndpointRule; import at.gv.egiz.eaaf.core.api.IRequest; import at.gv.egiz.eaaf.core.api.IRequestStorage; import at.gv.egiz.eaaf.core.api.data.EAAFConfigConstants; import at.gv.egiz.eaaf.core.api.data.EAAFConstants; import at.gv.egiz.eaaf.core.api.idp.ISPConfiguration; import at.gv.egiz.eaaf.core.api.idp.process.ExecutionContext; import at.gv.egiz.eaaf.core.exceptions.EAAFException; import at.gv.egiz.eaaf.core.exceptions.EAAFParserException; import at.gv.egiz.eaaf.core.exceptions.PendingReqIdValidationException; import at.gv.egiz.eaaf.core.exceptions.TaskExecutionException; import at.gv.egiz.eaaf.core.impl.idp.module.test.DummySPConfiguration; import at.gv.egiz.eaaf.core.impl.idp.module.test.TestRequestImpl; import at.gv.egiz.eaaf.core.impl.idp.process.ExecutionContextImpl; import at.gv.egovernment.moa.id.auth.data.AuthenticationSessionWrapper; import at.gv.egovernment.moa.id.auth.exception.AuthenticationException; import at.gv.egovernment.moa.id.auth.modules.ehvd.ConfigurationProperties; import at.gv.egovernment.moa.id.auth.modules.ehvd.client.wsdl.EHVD; import at.gv.egovernment.moa.id.auth.modules.ehvd.client.wsdl.GDARoles; import at.gv.egovernment.moa.id.auth.modules.ehvd.client.wsdl.GDAStatus; import at.gv.egovernment.moa.id.auth.modules.ehvd.client.wsdl.GdaAddress; import at.gv.egovernment.moa.id.auth.modules.ehvd.client.wsdl.GdaDescriptor; import at.gv.egovernment.moa.id.auth.modules.ehvd.client.wsdl.GdaIndexResponse; import at.gv.egovernment.moa.id.auth.modules.ehvd.client.wsdl.InstanceIdentifier; import at.gv.egovernment.moa.id.auth.modules.ehvd.task.InjectEhvdInformationTask; import at.gv.egovernment.moa.id.auth.modules.ehvd.test.dummy.DummyAuthConfigMap; import at.gv.egovernment.moa.id.auth.modules.ehvd.test.dummy.TestUtils; import at.gv.egovernment.moa.id.protocols.pvp2x.PVPConstants; @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration({ "/test_ehvd_service_auth.beans.xml" }) public class InjectEhvdIdentityInformationTaskTest { @Autowired InjectEhvdInformationTask task; @Autowired DummyAuthConfigMap config; @Autowired IRequestStorage storage; @Rule public final Soap12EndpointRule soap = Soap12EndpointRule.newInstance(); protected MockHttpServletRequest httpReq; protected MockHttpServletResponse httpResp; private ExecutionContext context; private TestRequestImpl pendingReq; private Map spConfigMap; private EHVD ehvdService; @Before public void initialize() throws EAAFParserException { httpReq = new MockHttpServletRequest("POST", "https://localhost/authhandler"); httpResp = new MockHttpServletResponse(); RequestContextHolder.resetRequestAttributes(); RequestContextHolder.setRequestAttributes(new ServletRequestAttributes(httpReq, httpResp)); context = new ExecutionContextImpl(); spConfigMap = new HashMap<>(); spConfigMap.put(EAAFConfigConstants.SERVICE_UNIQUEIDENTIFIER, RandomStringUtils.randomAlphanumeric(10)); final ISPConfiguration spConfig = new DummySPConfiguration(spConfigMap, config); pendingReq = new TestRequestImpl(); pendingReq.setPendingReqId(RandomStringUtils.randomAlphanumeric(10)); pendingReq.setSpConfig(spConfig); // re-set config config.putConfigValue("modules.dummyauth.enabled", String.valueOf(true)); // inject identityLink final AuthenticationSessionWrapper moaSession = pendingReq.getSessionData( AuthenticationSessionWrapper.class); moaSession.setIdentityLink(TestUtils.generateDummyIdl( RandomStringUtils.randomAlphanumeric(10), EAAFConstants.URN_PREFIX_BASEID)); // mock EHVD service ehvdService = soap.mock(EHVD.class, "http://localhost:1234/ehvd"); } @Test public void noIdentityLinkInSession() { final AuthenticationSessionWrapper moaSession = pendingReq.getSessionData( AuthenticationSessionWrapper.class); moaSession.setIdentityLink(null); try { task.execute(pendingReq, context); fail("wrong state not detected"); } catch (final TaskExecutionException e) { Assert.isInstanceOf(AuthenticationException.class, e.getOriginalException(), "wrong execpetion"); assertEquals("wrong errorCode", "process.04", ((EAAFException) e.getOriginalException()).getErrorId()); } } @Test public void noActiveGda() throws TaskExecutionException, PendingReqIdValidationException { // set-up EHVD response String role1 = RandomStringUtils.randomAlphabetic(10); when(ehvdService.getGDA(any())).thenReturn(generateGdaResponse(false, Arrays.asList(role1))); try { task.execute(pendingReq, context); fail("wrong state not detected"); } catch (final TaskExecutionException e) { Assert.isInstanceOf(AuthenticationException.class, e.getOriginalException(), "wrong execpetion"); assertEquals("wrong errorCode", "ehvd.00", ((EAAFException) e.getOriginalException()).getErrorId()); } } @Test public void gdaGenericServiceError() throws TaskExecutionException, PendingReqIdValidationException { // set-up EHVD response when(ehvdService.getGDA(any())).thenThrow(new RuntimeException("No anwser from Service")); try { task.execute(pendingReq, context); fail("wrong state not detected"); } catch (final TaskExecutionException e) { Assert.isInstanceOf(AuthenticationException.class, e.getOriginalException(), "wrong execpetion"); assertEquals("wrong errorCode", "ehvd.02", ((EAAFException) e.getOriginalException()).getErrorId()); } } @Test public void gdaServiceError() throws TaskExecutionException, PendingReqIdValidationException { // set-up EHVD response String msg = RandomStringUtils.randomAlphabetic(10); SOAPFault fault = generateSoaFault(msg); SOAPFaultException error = new SOAPFaultException(fault ); when(ehvdService.getGDA(any())).thenThrow(error); try { task.execute(pendingReq, context); fail("wrong state not detected"); } catch (final TaskExecutionException e) { Assert.isInstanceOf(AuthenticationException.class, e.getOriginalException(), "wrong execpetion"); assertEquals("wrong errorCode", "ehvd.02", ((EAAFException) e.getOriginalException()).getErrorId()); } } @Test public void noGdaInfosInResponse() throws TaskExecutionException, PendingReqIdValidationException { // set-up EHVD response GdaIndexResponse gdaResponse = new GdaIndexResponse(); when(ehvdService.getGDA(any())).thenReturn(gdaResponse); try { task.execute(pendingReq, context); fail("wrong state not detected"); } catch (final TaskExecutionException e) { Assert.isInstanceOf(AuthenticationException.class, e.getOriginalException(), "wrong execpetion"); assertEquals("wrong errorCode", "ehvd.03", ((EAAFException) e.getOriginalException()).getErrorId()); } } @Test public void noValidGdaRole() throws TaskExecutionException, PendingReqIdValidationException { // set-up EHVD response String role1 = RandomStringUtils.randomAlphabetic(10); String role2 = RandomStringUtils.randomAlphabetic(10); when(ehvdService.getGDA(any())).thenReturn(generateGdaResponse(true, Arrays.asList(role1, role2))); try { task.execute(pendingReq, context); fail("wrong state not detected"); } catch (final TaskExecutionException e) { Assert.isInstanceOf(AuthenticationException.class, e.getOriginalException(), "wrong execpetion"); assertEquals("wrong errorCode", "ehvd.04", ((EAAFException) e.getOriginalException()).getErrorId()); } } @Test public void validateStateWithRandomData() throws TaskExecutionException, PendingReqIdValidationException { // set-up EHVD response String role1 = RandomStringUtils.randomAlphabetic(10); String role2 = "1.2.40.0.34.5.2:101"; String role3 = RandomStringUtils.randomAlphabetic(10); when(ehvdService.getGDA(any())).thenReturn(generateGdaResponse(true, Arrays.asList(role1, role2, role3))); task.execute(pendingReq, context); // validate state final IRequest storedReq = storage.getPendingRequest(pendingReq.getPendingRequestId()); assertNotNull("pendingReq not stored", storedReq); final AuthenticationSessionWrapper moaSession = storedReq.getSessionData( AuthenticationSessionWrapper.class); assertFalse("foreign", moaSession.isForeigner()); assertFalse("mandate", moaSession.isMandateUsed()); assertEquals("missing attributes", 2, moaSession.getGenericSessionDataStorage().size()); assertNotNull("no Role attr", moaSession.getGenericDataFromSession(PVPConstants.ROLES_NAME)); assertEquals("wrong role attr", "EPI-GDA()", moaSession.getGenericDataFromSession(PVPConstants.ROLES_NAME, String.class)); } @Test public void validateState() throws TaskExecutionException, PendingReqIdValidationException { // set-up EHVD response String role1 = "1.2.40.0.33.5.2.101"; String role2 = "1.2.40.0.34.5.2:100"; String role3 = RandomStringUtils.randomAlphabetic(10); when(ehvdService.getGDA(any())).thenReturn(generateGdaResponse(true, Arrays.asList(role1, role2, role3))); task.execute(pendingReq, context); // validate state final IRequest storedReq = storage.getPendingRequest(pendingReq.getPendingRequestId()); assertNotNull("pendingReq not stored", storedReq); final AuthenticationSessionWrapper moaSession = storedReq.getSessionData( AuthenticationSessionWrapper.class); assertFalse("foreign", moaSession.isForeigner()); assertFalse("mandate", moaSession.isMandateUsed()); assertEquals("missing attributes", 2, moaSession.getGenericSessionDataStorage().size()); assertNotNull("no Role attr", moaSession.getGenericDataFromSession(PVPConstants.ROLES_NAME)); assertEquals("wrong role attr", "EPI-GDA()", moaSession.getGenericDataFromSession(PVPConstants.ROLES_NAME, String.class)); } @Test public void validateStateSecondOid() throws TaskExecutionException, PendingReqIdValidationException { // set-up EHVD response String role1 = "1.2.40.0.33.5.2.101"; String role2 = "1.2.40.0.34.5.2:158"; String role3 = RandomStringUtils.randomAlphabetic(10); GdaIndexResponse gdaResponse = generateGdaResponse(true, Arrays.asList(role1, role2, role3)); when(ehvdService.getGDA(any())).thenReturn(gdaResponse); task.execute(pendingReq, context); // validate state final IRequest storedReq = storage.getPendingRequest(pendingReq.getPendingRequestId()); assertNotNull("pendingReq not stored", storedReq); final AuthenticationSessionWrapper moaSession = storedReq.getSessionData( AuthenticationSessionWrapper.class); assertFalse("foreign", moaSession.isForeigner()); assertFalse("mandate", moaSession.isMandateUsed()); assertEquals("missing attributes", 2, moaSession.getGenericSessionDataStorage().size()); assertNotNull("no Role attr", moaSession.getGenericDataFromSession(PVPConstants.ROLES_NAME)); assertEquals("wrong role attr", "EPI-GDA()", moaSession.getGenericDataFromSession(PVPConstants.ROLES_NAME, String.class)); assertNotNull("no full GDA response", moaSession.getGenericDataFromSession(ConfigurationProperties.ATTRIBUTE_URN_EHVD_PREFIX)); assertTrue("wrong GDA response type", moaSession.getGenericDataFromSession(ConfigurationProperties.ATTRIBUTE_URN_EHVD_PREFIX) instanceof GdaDescriptor); } private GdaIndexResponse generateGdaResponse(boolean isActive, List roles) { GdaIndexResponse resp = new GdaIndexResponse(); GdaDescriptor gda = new GdaDescriptor(); resp.setGda(gda); GDAStatus status = new GDAStatus(); gda.setStatus(status); status.setEhvdstatus(isActive ? "Aktiv" : "Inaktiv"); gda.setFirstname(RandomStringUtils.randomAlphabetic(5)); gda.setSurname(RandomStringUtils.randomAlphabetic(5)); gda.setTitle(RandomStringUtils.randomAlphabetic(5)); InstanceIdentifier id = new InstanceIdentifier(); id.setId(RandomStringUtils.randomAlphabetic(5)); gda.setId(id); gda.getOtherID().add(RandomStringUtils.randomAlphabetic(5)); gda.getOtherID().add(RandomStringUtils.randomAlphabetic(5)); gda.getAddress().add(generateAddress()); gda.getAddress().add(generateAddress()); GDARoles gdaRoles = new GDARoles(); gda.setRoles(gdaRoles); gdaRoles.getRole().addAll(roles); return resp; } private GdaAddress generateAddress() { GdaAddress address = new GdaAddress(); address.setZip(RandomStringUtils.randomNumeric(4)); address.setState(RandomStringUtils.randomAlphabetic(10)); return address; } private SOAPFault generateSoaFault(String msg) { return new SOAPFault() { @Override public void setIdAttributeNode(Attr idAttr, boolean isId) throws DOMException { // TODO Auto-generated method stub } @Override public void setIdAttributeNS(String namespaceURI, String localName, boolean isId) throws DOMException { // TODO Auto-generated method stub } @Override public void setIdAttribute(String name, boolean isId) throws DOMException { // TODO Auto-generated method stub } @Override public Attr setAttributeNodeNS(Attr newAttr) throws DOMException { // TODO Auto-generated method stub return null; } @Override public Attr setAttributeNode(Attr newAttr) throws DOMException { // TODO Auto-generated method stub return null; } @Override public void setAttributeNS(String namespaceURI, String qualifiedName, String value) throws DOMException { // TODO Auto-generated method stub } @Override public void setAttribute(String name, String value) throws DOMException { // TODO Auto-generated method stub } @Override public Attr removeAttributeNode(Attr oldAttr) throws DOMException { // TODO Auto-generated method stub return null; } @Override public void removeAttributeNS(String namespaceURI, String localName) throws DOMException { // TODO Auto-generated method stub } @Override public void removeAttribute(String name) throws DOMException { // TODO Auto-generated method stub } @Override public boolean hasAttributeNS(String namespaceURI, String localName) throws DOMException { // TODO Auto-generated method stub return false; } @Override public boolean hasAttribute(String name) { // TODO Auto-generated method stub return false; } @Override public String getTagName() { // TODO Auto-generated method stub return null; } @Override public TypeInfo getSchemaTypeInfo() { // TODO Auto-generated method stub return null; } @Override public NodeList getElementsByTagNameNS(String namespaceURI, String localName) throws DOMException { // TODO Auto-generated method stub return null; } @Override public NodeList getElementsByTagName(String name) { // TODO Auto-generated method stub return null; } @Override public Attr getAttributeNodeNS(String namespaceURI, String localName) throws DOMException { // TODO Auto-generated method stub return null; } @Override public Attr getAttributeNode(String name) { // TODO Auto-generated method stub return null; } @Override public String getAttributeNS(String namespaceURI, String localName) throws DOMException { // TODO Auto-generated method stub return null; } @Override public String getAttribute(String name) { // TODO Auto-generated method stub return null; } @Override public Object setUserData(String key, Object data, UserDataHandler handler) { // TODO Auto-generated method stub return null; } @Override public void setTextContent(String textContent) throws DOMException { // TODO Auto-generated method stub } @Override public void setPrefix(String prefix) throws DOMException { // TODO Auto-generated method stub } @Override public void setNodeValue(String nodeValue) throws DOMException { // TODO Auto-generated method stub } @Override public Node replaceChild(Node newChild, Node oldChild) throws DOMException { // TODO Auto-generated method stub return null; } @Override public Node removeChild(Node oldChild) throws DOMException { // TODO Auto-generated method stub return null; } @Override public void normalize() { // TODO Auto-generated method stub } @Override public String lookupPrefix(String namespaceURI) { // TODO Auto-generated method stub return null; } @Override public String lookupNamespaceURI(String prefix) { // TODO Auto-generated method stub return null; } @Override public boolean isSupported(String feature, String version) { // TODO Auto-generated method stub return false; } @Override public boolean isSameNode(Node other) { // TODO Auto-generated method stub return false; } @Override public boolean isEqualNode(Node arg) { // TODO Auto-generated method stub return false; } @Override public boolean isDefaultNamespace(String namespaceURI) { // TODO Auto-generated method stub return false; } @Override public Node insertBefore(Node newChild, Node refChild) throws DOMException { // TODO Auto-generated method stub return null; } @Override public boolean hasChildNodes() { // TODO Auto-generated method stub return false; } @Override public boolean hasAttributes() { // TODO Auto-generated method stub return false; } @Override public Object getUserData(String key) { // TODO Auto-generated method stub return null; } @Override public String getTextContent() throws DOMException { // TODO Auto-generated method stub return null; } @Override public Node getPreviousSibling() { // TODO Auto-generated method stub return null; } @Override public String getPrefix() { // TODO Auto-generated method stub return null; } @Override public Node getParentNode() { // TODO Auto-generated method stub return null; } @Override public Document getOwnerDocument() { // TODO Auto-generated method stub return null; } @Override public String getNodeValue() throws DOMException { // TODO Auto-generated method stub return null; } @Override public short getNodeType() { // TODO Auto-generated method stub return 0; } @Override public String getNodeName() { // TODO Auto-generated method stub return null; } @Override public Node getNextSibling() { // TODO Auto-generated method stub return null; } @Override public String getNamespaceURI() { // TODO Auto-generated method stub return null; } @Override public String getLocalName() { // TODO Auto-generated method stub return null; } @Override public Node getLastChild() { // TODO Auto-generated method stub return null; } @Override public Node getFirstChild() { // TODO Auto-generated method stub return null; } @Override public Object getFeature(String feature, String version) { // TODO Auto-generated method stub return null; } @Override public NodeList getChildNodes() { // TODO Auto-generated method stub return null; } @Override public String getBaseURI() { // TODO Auto-generated method stub return null; } @Override public NamedNodeMap getAttributes() { // TODO Auto-generated method stub return null; } @Override public short compareDocumentPosition(Node other) throws DOMException { // TODO Auto-generated method stub return 0; } @Override public Node cloneNode(boolean deep) { // TODO Auto-generated method stub return null; } @Override public Node appendChild(Node newChild) throws DOMException { // TODO Auto-generated method stub return null; } @Override public void setValue(String value) { // TODO Auto-generated method stub } @Override public void setParentElement(SOAPElement parent) throws SOAPException { // TODO Auto-generated method stub } @Override public void recycleNode() { // TODO Auto-generated method stub } @Override public String getValue() { // TODO Auto-generated method stub return null; } @Override public SOAPElement getParentElement() { // TODO Auto-generated method stub return null; } @Override public void detachNode() { // TODO Auto-generated method stub } @Override public void setEncodingStyle(String encodingStyle) throws SOAPException { // TODO Auto-generated method stub } @Override public SOAPElement setElementQName(QName newName) throws SOAPException { // TODO Auto-generated method stub return null; } @Override public boolean removeNamespaceDeclaration(String prefix) { // TODO Auto-generated method stub return false; } @Override public void removeContents() { // TODO Auto-generated method stub } @Override public boolean removeAttribute(QName qname) { // TODO Auto-generated method stub return false; } @Override public boolean removeAttribute(Name name) { // TODO Auto-generated method stub return false; } @Override public Iterator getVisibleNamespacePrefixes() { // TODO Auto-generated method stub return null; } @Override public String getNamespaceURI(String prefix) { // TODO Auto-generated method stub return null; } @Override public Iterator getNamespacePrefixes() { // TODO Auto-generated method stub return null; } @Override public String getEncodingStyle() { // TODO Auto-generated method stub return null; } @Override public QName getElementQName() { // TODO Auto-generated method stub return null; } @Override public Name getElementName() { // TODO Auto-generated method stub return null; } @Override public Iterator getChildElements(QName qname) { // TODO Auto-generated method stub return null; } @Override public Iterator getChildElements(Name name) { // TODO Auto-generated method stub return null; } @Override public Iterator getChildElements() { // TODO Auto-generated method stub return null; } @Override public String getAttributeValue(QName qname) { // TODO Auto-generated method stub return null; } @Override public String getAttributeValue(Name name) { // TODO Auto-generated method stub return null; } @Override public Iterator getAllAttributesAsQNames() { // TODO Auto-generated method stub return null; } @Override public Iterator getAllAttributes() { // TODO Auto-generated method stub return null; } @Override public QName createQName(String localName, String prefix) throws SOAPException { // TODO Auto-generated method stub return null; } @Override public SOAPElement addTextNode(String text) throws SOAPException { // TODO Auto-generated method stub return null; } @Override public SOAPElement addNamespaceDeclaration(String prefix, String uri) throws SOAPException { // TODO Auto-generated method stub return null; } @Override public SOAPElement addChildElement(String localName, String prefix, String uri) throws SOAPException { // TODO Auto-generated method stub return null; } @Override public SOAPElement addChildElement(String localName, String prefix) throws SOAPException { // TODO Auto-generated method stub return null; } @Override public SOAPElement addChildElement(SOAPElement element) throws SOAPException { // TODO Auto-generated method stub return null; } @Override public SOAPElement addChildElement(String localName) throws SOAPException { // TODO Auto-generated method stub return null; } @Override public SOAPElement addChildElement(QName qname) throws SOAPException { // TODO Auto-generated method stub return null; } @Override public SOAPElement addChildElement(Name name) throws SOAPException { // TODO Auto-generated method stub return null; } @Override public SOAPElement addAttribute(QName qname, String value) throws SOAPException { // TODO Auto-generated method stub return null; } @Override public SOAPElement addAttribute(Name name, String value) throws SOAPException { // TODO Auto-generated method stub return null; } @Override public void setFaultString(String faultString, Locale locale) throws SOAPException { // TODO Auto-generated method stub } @Override public void setFaultString(String faultString) throws SOAPException { // TODO Auto-generated method stub } @Override public void setFaultRole(String uri) throws SOAPException { // TODO Auto-generated method stub } @Override public void setFaultNode(String uri) throws SOAPException { // TODO Auto-generated method stub } @Override public void setFaultCode(String faultCode) throws SOAPException { // TODO Auto-generated method stub } @Override public void setFaultCode(QName faultCodeQName) throws SOAPException { // TODO Auto-generated method stub } @Override public void setFaultCode(Name faultCodeQName) throws SOAPException { // TODO Auto-generated method stub } @Override public void setFaultActor(String faultActor) throws SOAPException { // TODO Auto-generated method stub } @Override public void removeAllFaultSubcodes() { // TODO Auto-generated method stub } @Override public boolean hasDetail() { // TODO Auto-generated method stub return false; } @Override public Iterator getFaultSubcodes() { // TODO Auto-generated method stub return null; } @Override public Locale getFaultStringLocale() { // TODO Auto-generated method stub return null; } @Override public String getFaultString() { return msg; } @Override public String getFaultRole() { // TODO Auto-generated method stub return null; } @Override public Iterator getFaultReasonTexts() throws SOAPException { // TODO Auto-generated method stub return null; } @Override public String getFaultReasonText(Locale locale) throws SOAPException { // TODO Auto-generated method stub return null; } @Override public Iterator getFaultReasonLocales() throws SOAPException { // TODO Auto-generated method stub return null; } @Override public String getFaultNode() { // TODO Auto-generated method stub return null; } @Override public QName getFaultCodeAsQName() { // TODO Auto-generated method stub return null; } @Override public Name getFaultCodeAsName() { // TODO Auto-generated method stub return null; } @Override public String getFaultCode() { // TODO Auto-generated method stub return null; } @Override public String getFaultActor() { // TODO Auto-generated method stub return null; } @Override public Detail getDetail() { // TODO Auto-generated method stub return null; } @Override public void appendFaultSubcode(QName subcode) throws SOAPException { // TODO Auto-generated method stub } @Override public void addFaultReasonText(String text, Locale locale) throws SOAPException { // TODO Auto-generated method stub } @Override public Detail addDetail() throws SOAPException { // TODO Auto-generated method stub return null; } }; } }