Package com.eviware.soapui.support.editor.inspectors.wsrm

Source Code of com.eviware.soapui.support.editor.inspectors.wsrm.WsdlRequestWsrmInspector

/*
* Copyright 2004-2014 SmartBear Software
*
* Licensed under the EUPL, Version 1.1 or - as soon as they will be approved by the European Commission - subsequent
* versions of the EUPL (the "Licence");
* You may not use this work except in compliance with the Licence.
* You may obtain a copy of the Licence at:
*
* http://ec.europa.eu/idabc/eupl
*
* Unless required by applicable law or agreed to in writing, software distributed under the Licence is
* distributed on an "AS IS" basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
* express or implied. See the Licence for the specific language governing permissions and limitations
* under the Licence.
*/

package com.eviware.soapui.support.editor.inspectors.wsrm;

import com.eviware.soapui.config.WsrmVersionTypeConfig;
import com.eviware.soapui.impl.wsdl.WsdlInterface;
import com.eviware.soapui.impl.wsdl.WsdlRequest;
import com.eviware.soapui.impl.wsdl.support.wsmc.WsmcInjection;
import com.eviware.soapui.impl.wsdl.support.wsrm.WsrmContainer;
import com.eviware.soapui.impl.wsdl.support.wsrm.WsrmSequence;
import com.eviware.soapui.impl.wsdl.support.wsrm.WsrmUtils;
import com.eviware.soapui.model.iface.Submit;
import com.eviware.soapui.model.iface.SubmitContext;
import com.eviware.soapui.model.iface.SubmitListener;
import com.eviware.soapui.support.components.SimpleBindingForm;
import com.eviware.soapui.support.editor.xml.XmlInspector;
import com.eviware.soapui.support.xml.XmlUtils;
import org.apache.log4j.Logger;
import org.apache.xmlbeans.XmlException;
import org.apache.xmlbeans.XmlObject;
import org.apache.xmlbeans.XmlOptions;

public class WsdlRequestWsrmInspector extends AbstractWsrmInspector implements XmlInspector, SubmitListener {
    private final WsdlRequest request;

    public WsdlRequestWsrmInspector(WsdlRequest request) {
        super(request);

        request.addSubmitListener(this);
        this.request = request;
    }

    public void buildContent(SimpleBindingForm form) {
        form.addSpace(5);
        form.appendCheckBox("wsrmEnabled", "Enable WS-Reliable Messaging", "");
        form.addSpace(5);

        form.appendComboBox("version", "WS-RM Version", new String[]{WsrmVersionTypeConfig.X_1_0.toString(),
                WsrmVersionTypeConfig.X_1_1.toString(), WsrmVersionTypeConfig.X_1_2.toString()},
                "The  property for managing WS-RM version");

        form.appendTextField("ackTo", "Acknowledgment to",
                "The acknowledgment endpoint reference, will be generated if left empty");
        form.appendTextField("offerEndpoint", "Offer endpoint",
                "The endpoint address included in the Offer element");

        form.addSpace(5);
    }

    @Override
    public void release() {
        super.release();
        request.removeSubmitListener(this);
    }

    public void afterSubmit(Submit submit, SubmitContext context) {
        WsrmContainer container = (WsrmContainer) submit.getRequest();
        if (request.getWsrmConfig().isWsrmEnabled() && submit.getResponse() != null) {
            String content = submit.getResponse().getContentAsString();
            XmlOptions options = new XmlOptions();
            try {
                XmlObject xml = XmlUtils.createXmlObject(content);

                String namespaceDeclaration = "declare namespace wsrm='" + request.getWsrmConfig().getVersionNameSpace()
                        + "';";
                XmlObject result[] = xml.selectPath(namespaceDeclaration + "//wsrm:AcknowledgementRange", options);

                if (result.length > 0) {
                    for (XmlObject aResult : result) {
                        String upper = aResult.selectAttribute(null, "Upper").getDomNode().getNodeValue();
                        String lower = aResult.selectAttribute(null, "Lower").getDomNode().getNodeValue();

                        if (lower.equals(upper)) {
                            Logger.getLogger("wsrm").info(
                                    "Acknowledgment for message " + upper + " received for identifier: "
                                            + request.getWsrmConfig().getSequenceIdentifier());
                        } else {
                            Logger.getLogger("wsrm").info(
                                    "Acknowledgment for messages " + lower + " to " + upper + " received for identifier: "
                                            + request.getWsrmConfig().getSequenceIdentifier());
                        }
                    }
                }
            } catch (XmlException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }

        if (container.getWsrmConfig().isWsrmEnabled()) {
            WsdlInterface iface = request.getOperation().getInterface();
            WsrmUtils utils = new WsrmUtils(iface.getSoapVersion());
            utils.closeSequence(request.getEndpoint(), iface.getSoapVersion(), request.getWsrmConfig()
                    .getVersionNameSpace(), request.getWsrmConfig().getUuid(), request.getWsrmConfig()
                    .getSequenceIdentifier(), 1l, request.getOperation());
        }
    }

    public boolean beforeSubmit(Submit submit, SubmitContext context) {
        WsrmContainer container = (WsrmContainer) submit.getRequest();
        if (container.getWsrmConfig().isWsrmEnabled()) {
            WsdlInterface iface = request.getOperation().getInterface();
            WsrmUtils utils = new WsrmUtils(iface.getSoapVersion());

            WsrmSequence sequence = utils.createSequence(request.getEndpoint(), iface.getSoapVersion(), request
                    .getWsrmConfig().getVersionNameSpace(), request.getWsrmConfig().getAckTo(), 0l, request.getOperation(),
                    ((WsdlRequest) submit.getRequest()).getWsaConfig().getTo(), request.getWsrmConfig().getOfferEndpoint());

            request.getWsrmConfig().setSequenceIdentifier(sequence.getIdentifier());
            request.getWsrmConfig().setUuid(sequence.getUuid());

            if (!request.getWsrmConfig().getVersion().equals(WsrmVersionTypeConfig.X_1_0.toString())) {
                WsmcInjection receiveInjection = new WsmcInjection(request.getEndpoint(), request.getOperation(),
                        iface.getSoapVersion(), request.getWsrmConfig().getUuid());
                request.setAfterRequestInjection(receiveInjection);
            }

        }
        return true;
    }

}
TOP

Related Classes of com.eviware.soapui.support.editor.inspectors.wsrm.WsdlRequestWsrmInspector

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.