Search in sources :

Example 1 with OneWayFeature

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));
}
Also used : DOMSource(javax.xml.transform.dom.DOMSource) InputStream(java.io.InputStream) OneWayFeature(com.sun.xml.ws.api.addressing.OneWayFeature) Element(org.w3c.dom.Element) ArrayList(java.util.ArrayList) WSService(com.sun.xml.ws.api.WSService) SOAPFault(jakarta.xml.soap.SOAPFault) MemberSubmissionAddressingFeature(com.sun.xml.ws.developer.MemberSubmissionAddressingFeature) DOMSource(javax.xml.transform.dom.DOMSource) Source(javax.xml.transform.Source)

Example 2 with OneWayFeature

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);
    }
}
Also used : AddressingVersion(com.sun.xml.ws.api.addressing.AddressingVersion) WsaTubeHelper(com.sun.xml.ws.addressing.WsaTubeHelper) WebServiceException(jakarta.xml.ws.WebServiceException) WSDLBoundOperation(com.sun.xml.ws.api.model.wsdl.WSDLBoundOperation) OneWayFeature(com.sun.xml.ws.api.addressing.OneWayFeature) AddressingPropertySet(com.sun.xml.ws.api.addressing.AddressingPropertySet)

Example 3 with OneWayFeature

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);
}
Also used : OneWayFeature(com.sun.xml.ws.api.addressing.OneWayFeature) WSEndpointReference(com.sun.xml.ws.api.addressing.WSEndpointReference)

Example 4 with OneWayFeature

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.
    }
}
Also used : DOMSource(javax.xml.transform.dom.DOMSource) OneWayFeature(com.sun.xml.ws.api.addressing.OneWayFeature) WSService(com.sun.xml.ws.api.WSService) WSEndpointReference(com.sun.xml.ws.api.addressing.WSEndpointReference) SOAPFault(jakarta.xml.soap.SOAPFault) MemberSubmissionAddressingFeature(com.sun.xml.ws.developer.MemberSubmissionAddressingFeature) DOMSource(javax.xml.transform.dom.DOMSource) Source(javax.xml.transform.Source)

Aggregations

OneWayFeature (com.sun.xml.ws.api.addressing.OneWayFeature)4 WSService (com.sun.xml.ws.api.WSService)2 WSEndpointReference (com.sun.xml.ws.api.addressing.WSEndpointReference)2 MemberSubmissionAddressingFeature (com.sun.xml.ws.developer.MemberSubmissionAddressingFeature)2 SOAPFault (jakarta.xml.soap.SOAPFault)2 Source (javax.xml.transform.Source)2 DOMSource (javax.xml.transform.dom.DOMSource)2 WsaTubeHelper (com.sun.xml.ws.addressing.WsaTubeHelper)1 AddressingPropertySet (com.sun.xml.ws.api.addressing.AddressingPropertySet)1 AddressingVersion (com.sun.xml.ws.api.addressing.AddressingVersion)1 WSDLBoundOperation (com.sun.xml.ws.api.model.wsdl.WSDLBoundOperation)1 WebServiceException (jakarta.xml.ws.WebServiceException)1 InputStream (java.io.InputStream)1 ArrayList (java.util.ArrayList)1 Element (org.w3c.dom.Element)1