use of com.sun.xml.ws.api.addressing.OneWayFeature in project metro-jax-ws by eclipse-ee4j.
the class AddNumbersClient method testCustomFault.
/**
* This test tests the functionality of OnewayFeature and AddressingFeature the way it being used in WS-AT implementation
* In WS-AT impl, Server-side has to send fault messages to predefined coordinator and this test replicates that usage.
*
* @throws Exception
*/
public void testCustomFault() throws Exception {
if (ClientServerTestUtil.useLocal()) {
System.out.println("Only Testable in HTTP transport!");
return;
}
SOAPFault fault = SOAPFactory.newInstance().createFault("custom fault from client", SOAPConstants.SOAP_SENDER_FAULT);
InputStream is = getClass().getClassLoader().getResourceAsStream("wsa/fromwsdl/custom/config/AddNumbers.wsdl");
assertNotNull("WSDL cannot be read", is);
ArrayList<Element> metadata = new ArrayList<Element>();
metadata.add((Element) DOMUtil.createDOMNode(is).getFirstChild());
// WSEndpointReference to = new WSEndpointReference(AddressingVersion.W3C,
// getAddress(),
// SERVICE_QNAME,
// PORT_QNAME,
// PORT_TYPE_QNAME,
// metadata,
// getWsdlAddress(),
// null);
OneWayFeature owf = new OneWayFeature();
owf.setRelatesToID("uuid:foobar");
Service service = Service.create(SERVICE_QNAME);
service.addPort(PORT_QNAME, SOAPBinding.SOAP11HTTP_BINDING, getAddress());
// Dispatch<Source> dispatch = service.createDispatch(to.toSpec(), Source.class,
// Service.Mode.PAYLOAD,
// new AddressingFeature(true, true),
// owf);
Dispatch<Source> dispatch = service.createDispatch(PORT_QNAME, Source.class, Service.Mode.PAYLOAD, new MemberSubmissionAddressingFeature(true), owf);
// Since this fault is not a wsdl operation, we need to set SOAPAction for correct wsa:Action
dispatch.getRequestContext().put(BindingProvider.SOAPACTION_USE_PROPERTY, true);
dispatch.getRequestContext().put(BindingProvider.SOAPACTION_URI_PROPERTY, "http://example.com/myfault");
try {
dispatch.invokeOneWay(new DOMSource(fault));
} catch (WebServiceException e) {
// since the server-side is not provider based for this test.
// it does n't know from the fault message request that it is oneway and throws 500 code.
// so, expect a WebServcieException here.
}
// System.out.println(dispatch.getRequestContext().get(BindingProvider.ENDPOINT_ADDRESS_PROPERTY));
}
use of com.sun.xml.ws.api.addressing.OneWayFeature in project metro-jax-ws by eclipse-ee4j.
the class AddressingUtils method fillRequestAddressingHeaders.
// private void fillRequestAddressingHeaders(Packet packet, AddressingVersion av, SOAPVersion sv, OneWayFeature oneWayFeature, boolean oneway, String action);
public static void fillRequestAddressingHeaders(MessageHeaders headers, WSDLPort wsdlPort, WSBinding binding, Packet packet) {
if (binding == null) {
throw new IllegalArgumentException(AddressingMessages.NULL_BINDING());
}
if (binding.isFeatureEnabled(SuppressAutomaticWSARequestHeadersFeature.class)) {
return;
}
// See if WSA headers are already set by the user.
MessageHeaders hl = packet.getMessage().getHeaders();
String action = AddressingUtils.getAction(hl, binding.getAddressingVersion(), binding.getSOAPVersion());
if (action != null) {
// assume that all the WSA headers are set by the user
return;
}
AddressingVersion addressingVersion = binding.getAddressingVersion();
// seiModel is passed as null as it is not needed.
WsaTubeHelper wsaHelper = addressingVersion.getWsaHelper(wsdlPort, null, binding);
// wsa:Action
String effectiveInputAction = wsaHelper.getEffectiveInputAction(packet);
if (effectiveInputAction == null || effectiveInputAction.equals("") && binding.getSOAPVersion() == SOAPVersion.SOAP_11) {
throw new WebServiceException(ClientMessages.INVALID_SOAP_ACTION());
}
boolean oneway = !packet.expectReply;
if (wsdlPort != null) {
// the SOAP message with non-anonymous ReplyTo/FaultTo.
if (!oneway && packet.getMessage() != null && packet.getWSDLOperation() != null) {
WSDLBoundOperation wbo = wsdlPort.getBinding().get(packet.getWSDLOperation());
if (wbo != null && wbo.getAnonymous() == WSDLBoundOperation.ANONYMOUS.prohibited) {
throw new WebServiceException(AddressingMessages.WSAW_ANONYMOUS_PROHIBITED());
}
}
}
OneWayFeature oneWayFeature = binding.getFeature(OneWayFeature.class);
final AddressingPropertySet addressingPropertySet = packet.getSatellite(AddressingPropertySet.class);
oneWayFeature = addressingPropertySet == null ? oneWayFeature : new OneWayFeature(addressingPropertySet, addressingVersion);
if (oneWayFeature == null || !oneWayFeature.isEnabled()) {
// standard oneway
fillRequestAddressingHeaders(headers, packet, addressingVersion, binding.getSOAPVersion(), oneway, effectiveInputAction, AddressingVersion.isRequired(binding));
} else {
// custom oneway
fillRequestAddressingHeaders(headers, packet, addressingVersion, binding.getSOAPVersion(), oneWayFeature, oneway, effectiveInputAction);
}
}
use of com.sun.xml.ws.api.addressing.OneWayFeature in project metro-jax-ws by eclipse-ee4j.
the class AddNumbersClient method testOnewayWithReplyTo.
public void testOnewayWithReplyTo() throws Exception {
AddNumbersPortType stub = createStub(new OneWayFeature(true, new WSEndpointReference(getAddress(), AddressingVersion.W3C)));
stub.addNumbers5(10, 10);
}
use of com.sun.xml.ws.api.addressing.OneWayFeature in project metro-jax-ws by eclipse-ee4j.
the class AddNumbersClient method testCustomFault1.
/**
* This test tests the functionality of OnewayFeature and AddressingFeature the way it being used in WS-AT implementation
* In WS-AT impl, Server-side has to send fault messages to predefined coordinator and this test replicates that usage.
*
* @throws Exception
*/
public void testCustomFault1() throws Exception {
SOAPFault fault = SOAPFactory.newInstance().createFault("custom fault from client", SOAPConstants.SOAP_SENDER_FAULT);
WSEndpointReference to = new WSEndpointReference(getAddress(), AddressingVersion.MEMBER);
OneWayFeature owf = new OneWayFeature();
owf.setRelatesToID("uuid:foobar");
WSService service = WSService.create();
service.addPort(PORT_QNAME, SOAPBinding.SOAP11HTTP_BINDING, getAddress());
Dispatch<Source> dispatch = service.createDispatch(PORT_QNAME, to, Source.class, Service.Mode.PAYLOAD, new MemberSubmissionAddressingFeature(true), owf);
// Since this fault is not a wsdl operation, we need to set SOAPAction for correct wsa:Action
dispatch.getRequestContext().put(BindingProvider.SOAPACTION_USE_PROPERTY, true);
dispatch.getRequestContext().put(BindingProvider.SOAPACTION_URI_PROPERTY, "http://example.com/myfault");
try {
dispatch.invokeOneWay(new DOMSource(fault));
} catch (WebServiceException e) {
// since the server-side is not provider based for this test.
// it does n't know from the fault message request that it is oneway and throws 500 code.
// so, expect a WebServcieException here.
}
}
Aggregations