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 ...
}
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);
}
}
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()));
}
}
}
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);
}
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");
}
Aggregations