@Override protected void populateUserDefinedHeader(String headerName, Object headerValue, SoapMessage target) { SoapHeader soapHeader = target.getSoapHeader(); if (headerValue instanceof String) { QName qname = QNameUtils.parseQNameString(headerName); soapHeader.addAttribute(qname, (String) headerValue); } else if (headerValue instanceof Source) { Result result = soapHeader.getResult(); try { this.transformerHelper.transform((Source) headerValue, result); } catch (TransformerException e) { throw new SoapHeaderException( "Could not transform source [" + headerValue + "] to result [" + result + "]", e); } } }
@Override protected void populateStandardHeaders(Map<String, Object> headers, SoapMessage target) { String soapAction = getHeaderIfAvailable(headers, WebServiceHeaders.SOAP_ACTION, String.class); if (StringUtils.hasText(soapAction)) { target.setSoapAction(soapAction); } else if (!StringUtils.hasText(target.getSoapAction())) { target.setSoapAction("\"\""); } }
@Override protected Map<String, Object> extractUserDefinedHeaders(SoapMessage source) { Map<String, Object> headers = new HashMap<String, Object>(); SoapHeader soapHeader = source.getSoapHeader(); if (soapHeader != null) { Iterator<?> attributeIter = soapHeader.getAllAttributes(); while (attributeIter.hasNext()) { Object name = attributeIter.next(); if (name instanceof QName) { String qnameString = QNameUtils.toQualifiedName((QName) name); String value = soapHeader.getAttributeValue((QName) name); if (value != null) { headers.put(qnameString, value); } } } Iterator<?> elementIter = soapHeader.examineAllHeaderElements(); while (elementIter.hasNext()) { Object element = elementIter.next(); if (element instanceof SoapHeaderElement) { QName qname = ((SoapHeaderElement) element).getName(); String qnameString = QNameUtils.toQualifiedName(qname); headers.put(qnameString, element); } } } return headers; }
/** Returns <code>getSoapBody().getFault().getFaultStringOrReason()</code>. */ public final String getFaultReason() { if (hasFault()) { return getSoapBody().getFault().getFaultStringOrReason(); } else { return null; } }
/** Returns {@code getSoapBody().getFault().getFaultCode()}. */ @Override public final QName getFaultCode() { if (hasFault()) { return getSoapBody().getFault().getFaultCode(); } else { return null; } }
when(response.getPayloadResult()).thenReturn(payloadResult); when(response.getSoapBody()).thenReturn(soapBody); when(context.getRequest()).thenReturn(request); when(request.getPayloadSource()).thenReturn(payloadSource); verify(soapBody).addServerOrReceiverFault(eq("503 Service Unavailable"), any(Locale.class)); when(request.getPayloadSource()).thenReturn(payloadSource);
SoapHeader soapHeader = ((SoapMessage) wsMessage).getSoapHeader(); assertNotNull(soapHeader.getAttributeValue(QNameUtils.parseQNameString("foo"))); assertNotNull(soapHeader.getAttributeValue(QNameUtils.parseQNameString("foobar"))); assertNotNull(soapHeader.getAttributeValue(QNameUtils.parseQNameString("abaz"))); assertNull(soapHeader.getAttributeValue(QNameUtils.parseQNameString("bar"))); if (soap) { ((SoapMessage) wsMessage).getSoapHeader().addAttribute(QNameUtils.parseQNameString("bar"), "bar"); ((SoapMessage) wsMessage).getSoapHeader().addAttribute(QNameUtils.parseQNameString("baz"), "baz");
@Override protected Map<String, Object> extractStandardHeaders(SoapMessage source) { final String soapAction = source.getSoapAction(); if (StringUtils.hasText(soapAction)) { Map<String, Object> headers = new HashMap<String, Object>(1); headers.put(WebServiceHeaders.SOAP_ACTION, soapAction); return headers; } else { return Collections.emptyMap(); } }
SaajSoapMessage message = new SaajSoapMessage(MessageFactory.newInstance().createMessage()); SoapHeader soapHeader = message.getSoapHeader(); assertEquals("bar", soapHeader.getAttributeValue(QNameUtils.parseQNameString("foo"))); soapHeader.examineHeaderElements(QNameUtils.parseQNameString("{http://test.auth.org}auth")); DOMSource authSource = (DOMSource) auth.getSource(); soapHeader.examineHeaderElements(QNameUtils.parseQNameString("{http://test.org}test"));
SOAPMessage message = MessageFactory.newInstance() .createMessage(new MimeHeaders(), new ByteArrayInputStream(soap.getBytes("UTF-8"))); SoapMessage soapMessage = new SaajSoapMessage(message); DefaultSoapHeaderMapper mapper = new DefaultSoapHeaderMapper(); String authHeader = "auth"; assertThat(headers.get(authHeader), instanceOf(SoapHeaderElement.class)); SoapHeaderElement header = (SoapHeaderElement) headers.get(authHeader); DOMSource source = (DOMSource) header.getSource(); NodeList nodeList = source.getNode().getChildNodes(); assertEquals("username", nodeList.item(0).getNodeName()); header = (SoapHeaderElement) headers.get("bar"); assertNotNull(header); source = (DOMSource) header.getSource(); nodeList = source.getNode().getChildNodes(); assertEquals("BAR", nodeList.item(0).getNodeValue()); header = (SoapHeaderElement) headers.get("baz"); assertNotNull(header); source = (DOMSource) header.getSource(); nodeList = source.getNode().getChildNodes(); assertEquals("BAZ", nodeList.item(0).getNodeValue());
/** Returns {@code getEnvelope().getBody()}. */ @Override public final SoapBody getSoapBody() { return getEnvelope().getBody(); }
/** Returns {@code getSoapBody().getPayloadSource()}. */ @Override public final Source getPayloadSource() { return getSoapBody().getPayloadSource(); }
@Test public void testCustomSoapHeader() { DefaultSoapHeaderMapper mapper = new DefaultSoapHeaderMapper(); mapper.setReplyHeaderNames("x:attr", "x:elem"); SoapMessage soapMessage = mock(SoapMessage.class); SoapHeader soapHeader = mock(SoapHeader.class); @SuppressWarnings("unchecked") Iterator<QName> attrIterator = mock(Iterator.class); QName attribute = new QName("http://x", "attr", "x"); @SuppressWarnings("unchecked") Iterator<SoapHeaderElement> elementIterator = mock(Iterator.class); SoapHeaderElement soapHeaderElement = mock(SoapHeaderElement.class); QName element = new QName("http://x", "elem", "x"); when(soapMessage.getSoapHeader()).thenReturn(soapHeader); when(soapHeader.getAllAttributes()).thenReturn(attrIterator); when(attrIterator.hasNext()).thenReturn(true).thenReturn(false); when(attrIterator.next()).thenReturn(attribute); when(soapHeader.getAttributeValue(attribute)).thenReturn("attrValue"); when(soapHeader.examineAllHeaderElements()).thenReturn(elementIterator); when(elementIterator.hasNext()).thenReturn(true).thenReturn(false); when(elementIterator.next()).thenReturn(soapHeaderElement); when(soapHeaderElement.getName()).thenReturn(element); Map<String, Object> headers = mapper.toHeadersFromReply(soapMessage); assertEquals(2, headers.size()); assertEquals("attrValue", headers.get("x:attr")); assertSame(soapHeaderElement, headers.get("x:elem")); }
/** Returns {@code getSoapBody().getFault().getFaultStringOrReason()}. */ @Override public final String getFaultReason() { if (hasFault()) { return getSoapBody().getFault().getFaultStringOrReason(); } else { return null; } }
/** Returns {@code getSoapBody().getFault().getFaultCode()}. */ @Override public final QName getFaultCode() { if (hasFault()) { return getSoapBody().getFault().getFaultCode(); } else { return null; } }
@Test public void testExtractStandardHeadersNullSoapAction() { DefaultSoapHeaderMapper mapper = new DefaultSoapHeaderMapper(); SoapMessage soapMessage = mock(SoapMessage.class); when(soapMessage.getSoapAction()).thenReturn(null); assertTrue(mapper.extractStandardHeaders(soapMessage).isEmpty()); }
/** Returns {@code getSoapBody().getFault().getFaultStringOrReason()}. */ @Override public final String getFaultReason() { if (hasFault()) { return getSoapBody().getFault().getFaultStringOrReason(); } else { return null; } }
@Test public void testExtractStandardHeadersEmptySoapAction() { DefaultSoapHeaderMapper mapper = new DefaultSoapHeaderMapper(); SoapMessage soapMessage = mock(SoapMessage.class); when(soapMessage.getSoapAction()).thenReturn(""); assertTrue(mapper.extractStandardHeaders(soapMessage).isEmpty()); }
@Test public void testExtractStandardHeadersNonEmptySoapAction() { DefaultSoapHeaderMapper mapper = new DefaultSoapHeaderMapper(); SoapMessage soapMessage = mock(SoapMessage.class); when(soapMessage.getSoapAction()).thenReturn("foo"); Map<String, Object> standardHeaders = mapper.toHeadersFromRequest(soapMessage); assertEquals(1, standardHeaders.size()); assertTrue(standardHeaders.containsKey(WebServiceHeaders.SOAP_ACTION)); assertEquals("foo", standardHeaders.get(WebServiceHeaders.SOAP_ACTION)); }
@Test // INT-1051 public void soapActionAndCustomCallback() { String uri = "http://www.example.org"; SimpleWebServiceOutboundGateway gateway = new SimpleWebServiceOutboundGateway(new TestDestinationProvider(uri)); final AtomicReference<String> soapActionFromCallback = new AtomicReference<String>(); gateway.setRequestCallback(message -> { SoapMessage soapMessage = (SoapMessage) message; soapActionFromCallback.set(soapMessage.getSoapAction()); }); gateway.setBeanFactory(mock(BeanFactory.class)); gateway.afterPropertiesSet(); String soapActionHeaderValue = "testAction"; String request = "<test>foo</test>"; try { gateway.handleMessage(MessageBuilder.withPayload(request) .setHeader(WebServiceHeaders.SOAP_ACTION, soapActionHeaderValue) .build()); fail("Expected MessageHandlingException"); } catch (MessageHandlingException e) { // expected } assertNotNull(soapActionFromCallback.get()); assertEquals("\"" + soapActionHeaderValue + "\"", soapActionFromCallback.get()); }