Search in sources :

Example 6 with StringHeader

use of com.sun.xml.ws.message.StringHeader in project metro-jax-ws by eclipse-ee4j.

the class WSATest method testEcho.

public void testEcho() {
    // setting user defined MessageID:
    List<Header> headers = new ArrayList<Header>();
    headers.add(new StringHeader(AddressingVersion.W3C.messageIDTag, "userDefinedMessageID"));
    ((WSBindingProvider) port).setOutboundHeaders(headers);
    port.echoString("String to be echoed");
// without fix, there is duplicit header wsa:MessageID so the WS call crashes with
// SOAPFaultException: A header representing a Message Addressing Property is
// not valid and the message cannot be processed ...
}
Also used : StringHeader(com.sun.xml.ws.message.StringHeader) Header(com.sun.xml.ws.api.message.Header) StringHeader(com.sun.xml.ws.message.StringHeader) ArrayList(java.util.ArrayList) WSBindingProvider(com.sun.xml.ws.developer.WSBindingProvider)

Example 7 with StringHeader

use of com.sun.xml.ws.message.StringHeader in project metro-jax-ws by eclipse-ee4j.

the class Packet method populateAddressingHeaders.

private void populateAddressingHeaders(Packet responsePacket, AddressingVersion av, SOAPVersion sv, String action, boolean mustUnderstand) {
    // populate WS-A headers only if WS-A is enabled
    if (av == null)
        return;
    // if one-way, then dont populate any WS-A headers
    if (responsePacket.getMessage() == null)
        return;
    MessageHeaders hl = responsePacket.getMessage().getHeaders();
    WsaPropertyBag wpb = getSatellite(WsaPropertyBag.class);
    Message msg = getMessage();
    // wsa:To
    WSEndpointReference replyTo = null;
    Header replyToFromRequestMsg = AddressingUtils.getFirstHeader(msg.getHeaders(), av.replyToTag, true, sv);
    Header replyToFromResponseMsg = hl.get(av.toTag, false);
    boolean replaceToTag = true;
    try {
        if (replyToFromRequestMsg != null) {
            replyTo = replyToFromRequestMsg.readAsEPR(av);
        }
        if (replyToFromResponseMsg != null && replyTo == null) {
            replaceToTag = false;
        }
    } catch (XMLStreamException e) {
        throw new WebServiceException(AddressingMessages.REPLY_TO_CANNOT_PARSE(), e);
    }
    if (replyTo == null) {
        replyTo = AddressingUtils.getReplyTo(msg.getHeaders(), av, sv);
    }
    // false for Provider with no wsdl, Expects User to set the coresponding header on the Message.
    if (AddressingUtils.getAction(responsePacket.getMessage().getHeaders(), av, sv) == null) {
        // wsa:Action header is not set in the message, so use the wsa:Action  passed as the parameter.
        hl.add(new StringHeader(av.actionTag, action, sv, mustUnderstand));
    }
    // wsa:MessageID
    if (responsePacket.getMessage().getHeaders().get(av.messageIDTag, false) == null) {
        // if header doesn't exist, method getID creates a new random id
        String newID = Message.generateMessageID();
        hl.add(new StringHeader(av.messageIDTag, newID));
    }
    // wsa:RelatesTo
    String mid = null;
    if (wpb != null) {
        mid = wpb.getMessageID();
    }
    if (mid == null) {
        mid = AddressingUtils.getMessageID(msg.getHeaders(), av, sv);
    }
    if (mid != null) {
        hl.addOrReplace(new RelatesToHeader(av.relatesToTag, mid));
    }
    // populate reference parameters
    WSEndpointReference refpEPR = null;
    if (responsePacket.getMessage().isFault()) {
        // choose FaultTo
        if (wpb != null) {
            refpEPR = wpb.getFaultToFromRequest();
        }
        if (refpEPR == null) {
            refpEPR = AddressingUtils.getFaultTo(msg.getHeaders(), av, sv);
        }
        // if FaultTo is null, then use ReplyTo
        if (refpEPR == null) {
            refpEPR = replyTo;
        }
    } else {
        // choose ReplyTo
        refpEPR = replyTo;
    }
    if (replaceToTag && refpEPR != null) {
        hl.addOrReplace(new StringHeader(av.toTag, refpEPR.getAddress()));
        refpEPR.addReferenceParametersToList(hl);
    }
}
Also used : WsaPropertyBag(com.sun.xml.ws.addressing.WsaPropertyBag) StringHeader(com.sun.xml.ws.message.StringHeader) SOAPMessage(jakarta.xml.soap.SOAPMessage) StringHeader(com.sun.xml.ws.message.StringHeader) RelatesToHeader(com.sun.xml.ws.message.RelatesToHeader) XMLStreamException(javax.xml.stream.XMLStreamException) WebServiceException(jakarta.xml.ws.WebServiceException) RelatesToHeader(com.sun.xml.ws.message.RelatesToHeader) WSEndpointReference(com.sun.xml.ws.api.addressing.WSEndpointReference)

Example 8 with StringHeader

use of com.sun.xml.ws.message.StringHeader in project metro-jax-ws by eclipse-ee4j.

the class AddressingUtils method fillRequestAddressingHeaders.

private static void fillRequestAddressingHeaders(@NotNull MessageHeaders headers, @NotNull Packet packet, @NotNull AddressingVersion av, @NotNull SOAPVersion sv, @NotNull OneWayFeature oneWayFeature, boolean oneway, @NotNull String action) {
    if (!oneway && !oneWayFeature.isUseAsyncWithSyncInvoke() && Boolean.TRUE.equals(packet.isSynchronousMEP)) {
        fillRequestAddressingHeaders(headers, packet, av, sv, oneway, action);
    } else {
        fillCommonAddressingHeaders(headers, packet, av, sv, action, false);
        boolean isMessageIdAdded = false;
        // add if it doesn't already exist and OneWayFeature requests a specific ReplyTo
        if (headers.get(av.replyToTag, false) == null) {
            WSEndpointReference replyToEpr = oneWayFeature.getReplyTo();
            if (replyToEpr != null) {
                headers.add(replyToEpr.createHeader(av.replyToTag));
                // add wsa:MessageID only for non-null ReplyTo
                if (packet.getMessage().getHeaders().get(av.messageIDTag, false) == null) {
                    // if header doesn't exist, method getID creates a new random id
                    String newID = oneWayFeature.getMessageId() == null ? Message.generateMessageID() : oneWayFeature.getMessageId();
                    headers.add(new StringHeader(av.messageIDTag, newID));
                    isMessageIdAdded = true;
                }
            }
        }
        // If the user sets a messageId, use it.
        final String messageId = oneWayFeature.getMessageId();
        if (!isMessageIdAdded && messageId != null) {
            headers.add(new StringHeader(av.messageIDTag, messageId));
        }
        // add if it doesn't already exist and OneWayFeature requests a specific FaultTo
        if (headers.get(av.faultToTag, false) == null) {
            WSEndpointReference faultToEpr = oneWayFeature.getFaultTo();
            if (faultToEpr != null) {
                headers.add(faultToEpr.createHeader(av.faultToTag));
                // add wsa:MessageID only for non-null FaultTo
                if (headers.get(av.messageIDTag, false) == null) {
                    headers.add(new StringHeader(av.messageIDTag, Message.generateMessageID()));
                }
            }
        }
        // wsa:From
        if (oneWayFeature.getFrom() != null) {
            headers.addOrReplace(oneWayFeature.getFrom().createHeader(av.fromTag));
        }
        // wsa:RelatesTo
        if (oneWayFeature.getRelatesToID() != null) {
            headers.addOrReplace(new RelatesToHeader(av.relatesToTag, oneWayFeature.getRelatesToID()));
        }
    }
}
Also used : StringHeader(com.sun.xml.ws.message.StringHeader) RelatesToHeader(com.sun.xml.ws.message.RelatesToHeader) WSEndpointReference(com.sun.xml.ws.api.addressing.WSEndpointReference)

Example 9 with StringHeader

use of com.sun.xml.ws.message.StringHeader in project metro-jax-ws by eclipse-ee4j.

the class SAAJMessageHeadersTest method testMustUnderstand2.

/**
 * Tests mustUnderstand using the getHeaders call with boolean rather than the "understood(..)" call
 */
public void testMustUnderstand2() throws Exception {
    SOAPMessage sm = makeSOAPMessage(MESSAGE);
    // SAAJMessage saajMsg = new SAAJMessage(sm);
    MessageHeaders hdrs = new SAAJMessageHeaders(sm, SOAPVersion.SOAP_11);
    // new must understand header
    Header newHdr = new StringHeader(new QName("myNs", "stringHeader1"), "stringHeaderValue1", SOAPVersion.SOAP_11, true);
    hdrs.add(newHdr);
    String hdrTxt = "<streamHeader1 S:mustUnderstand=\"true\" xmlns=\"myNs\" xmlns:S=\"" + SOAPConstants.URI_NS_SOAP_1_1_ENVELOPE + "\">streamHeaderValue1</streamHeader1>";
    ByteArrayInputStream bis = new ByteArrayInputStream(hdrTxt.getBytes());
    XMLStreamReader rdr = XMLInputFactory.newInstance().createXMLStreamReader(bis);
    while (rdr.getEventType() != XMLStreamReader.START_ELEMENT) rdr.next();
    newHdr = new StreamHeader11(rdr);
    hdrs.add(newHdr);
    hdrTxt = "<streamHeader2 S:mustUnderstand=\"true\" xmlns=\"mySecondNs\" xmlns:S=\"" + SOAPConstants.URI_NS_SOAP_1_1_ENVELOPE + "\">streamHeaderValue2</streamHeader2>";
    bis = new ByteArrayInputStream(hdrTxt.getBytes());
    rdr = XMLInputFactory.newInstance().createXMLStreamReader(bis);
    while (rdr.getEventType() != XMLStreamReader.START_ELEMENT) rdr.next();
    newHdr = new StreamHeader11(rdr);
    hdrs.add(newHdr);
    // now add a non-must understand string header
    newHdr = new StringHeader(new QName("myNs", "stringHeader2"), "stringHeaderValue2", SOAPVersion.SOAP_11, false);
    hdrs.add(newHdr);
    Set<QName> notUnderstoods = hdrs.getNotUnderstoodHeaders(null, null, null);
    assertNotNull(notUnderstoods);
    assertEquals(3, notUnderstoods.size());
    // mark hte headers in "myNs" namespace as understood when retrieving them
    Iterator<Header> myNsHeaders = hdrs.getHeaders("myNs", true);
    notUnderstoods = hdrs.getNotUnderstoodHeaders(null, null, null);
    assertNotNull(notUnderstoods);
    // should be only one header left that is not understood, and it should be the
    // mySecondNs header
    assertEquals(1, notUnderstoods.size());
    QName q = notUnderstoods.iterator().next();
    assertEquals(new QName("mySecondNs", "streamHeader2"), q);
    // Now examine the headers we marked as understood and make sure they are the right ones
    int myNsCount = 0;
    while (myNsHeaders.hasNext()) {
        Header h = myNsHeaders.next();
        assertNotNull(h);
        assertTrue(h instanceof SAAJHeader);
        assertEquals("myNs", h.getNamespaceURI());
        assertTrue("Unexpected header local name: " + h.getLocalPart() + " - must be streamHeader1 or stringHeader1 or stringHeader2", "streamHeader1".equals(h.getLocalPart()) || "stringHeader1".equals(h.getLocalPart()) || "stringHeader2".equals(h.getLocalPart()));
        myNsCount++;
    }
    assertEquals(3, myNsCount);
    Header h = hdrs.get("myNs", "stringHeader2", false);
    // this should be the non-must understand header, still there
    assertNotNull(h);
}
Also used : StringHeader(com.sun.xml.ws.message.StringHeader) XMLStreamReader(javax.xml.stream.XMLStreamReader) QName(javax.xml.namespace.QName) SOAPMessage(jakarta.xml.soap.SOAPMessage) SAAJMessageHeaders(com.sun.xml.ws.api.message.saaj.SAAJMessageHeaders) StringHeader(com.sun.xml.ws.message.StringHeader) Header(com.sun.xml.ws.api.message.Header) ByteArrayInputStream(java.io.ByteArrayInputStream) StreamHeader11(com.sun.xml.ws.message.stream.StreamHeader11) SAAJMessageHeaders(com.sun.xml.ws.api.message.saaj.SAAJMessageHeaders) MessageHeaders(com.sun.xml.ws.api.message.MessageHeaders)

Example 10 with StringHeader

use of com.sun.xml.ws.message.StringHeader in project metro-jax-ws by eclipse-ee4j.

the class StringHeaderTest method test1.

public void test1() {
    Header h = new StringHeader(AddressingVersion.W3C.actionTag, "http://example.com/action");
    assertEquals(h.getStringContent(), "http://example.com/action");
}
Also used : StringHeader(com.sun.xml.ws.message.StringHeader) Header(com.sun.xml.ws.api.message.Header) StringHeader(com.sun.xml.ws.message.StringHeader)

Aggregations

StringHeader (com.sun.xml.ws.message.StringHeader)11 Header (com.sun.xml.ws.api.message.Header)6 SOAPMessage (jakarta.xml.soap.SOAPMessage)5 WSEndpointReference (com.sun.xml.ws.api.addressing.WSEndpointReference)3 RelatesToHeader (com.sun.xml.ws.message.RelatesToHeader)3 ByteArrayInputStream (java.io.ByteArrayInputStream)3 QName (javax.xml.namespace.QName)3 MessageHeaders (com.sun.xml.ws.api.message.MessageHeaders)2 SAAJMessageHeaders (com.sun.xml.ws.api.message.saaj.SAAJMessageHeaders)2 MessageFactory (jakarta.xml.soap.MessageFactory)2 NotNull (com.sun.istack.NotNull)1 WsaPropertyBag (com.sun.xml.ws.addressing.WsaPropertyBag)1 Message (com.sun.xml.ws.api.message.Message)1 WSBindingProvider (com.sun.xml.ws.developer.WSBindingProvider)1 StreamHeader11 (com.sun.xml.ws.message.stream.StreamHeader11)1 MimeHeaders (jakarta.xml.soap.MimeHeaders)1 WebServiceException (jakarta.xml.ws.WebServiceException)1 ArrayList (java.util.ArrayList)1 XMLStreamException (javax.xml.stream.XMLStreamException)1 XMLStreamReader (javax.xml.stream.XMLStreamReader)1