Search in sources :

Example 21 with Part

use of javax.wsdl.Part in project carbon-business-process by wso2.

the class SOAPUtils method extractSOAPBodyParts.

private static void extractSOAPBodyParts(MessageExchange partnerRoleMessageExchange, org.apache.ode.bpel.iapi.Message messageToODE, SOAPBody omSOAPBody, List parts, String namespace, boolean isRPC) throws BPELFault {
    List<Part> messageBodyParts = partnerRoleMessageExchange.getOperation().getOutput().getMessage().getOrderedParts(parts);
    if (isRPC) {
        String rpcWrapperElementName = partnerRoleMessageExchange.getOperationName() + "Response";
        OMElement rpcWrapperElement = omSOAPBody.getFirstChildWithName(new QName(namespace, rpcWrapperElementName));
        if (rpcWrapperElement == null) {
            throw new BPELFault("Message body doesn't contain expected part wrapper: " + new QName(namespace, rpcWrapperElementName));
        }
        // children, since doc-lit rpc looks the same in ode and soap.
        for (Part partDef : messageBodyParts) {
            OMElement omPartElement = rpcWrapperElement.getFirstChildWithName(new QName(null, partDef.getName()));
            if (omPartElement == null) {
                throw new BPELFault("SOAP body doesn't contain required part: " + new QName(null, partDef.getName()));
            }
            messageToODE.setPart(omPartElement.getLocalName(), OMUtils.toDOM(omPartElement));
        }
    } else {
        // In doc-literal style, we expect the elements in the body to correspond (in order)
        // to the parts defined in the binding. All the parts should be element-typed,
        // otherwise it is a mess.
        Iterator<OMElement> omParts = omSOAPBody.getChildElements();
        for (Part partDef : messageBodyParts) {
            if (!omParts.hasNext()) {
                throw new BPELFault("SOAP body doesn't contain required part.");
            }
            OMElement omPart = omParts.next();
            if (partDef.getElementName() == null) {
                throw new BPELFault("Binding defines non element document list parts.");
            }
            if (!omPart.getQName().equals(partDef.getElementName())) {
                throw new BPELFault("Unexpected element in SOAP body: " + omPart.getQName());
            }
            Document doc = DOMUtils.newDocument();
            Element domPart = doc.createElementNS(null, partDef.getName());
            domPart.appendChild(doc.importNode(OMUtils.toDOM(omPart), true));
            messageToODE.setPart(partDef.getName(), domPart);
        }
    }
}
Also used : BPELFault(org.wso2.carbon.bpel.core.ode.integration.BPELFault) Part(javax.wsdl.Part) QName(javax.xml.namespace.QName) OMElement(org.apache.axiom.om.OMElement) Element(org.w3c.dom.Element) OMElement(org.apache.axiom.om.OMElement) Document(org.w3c.dom.Document)

Example 22 with Part

use of javax.wsdl.Part in project carbon-business-process by wso2.

the class SOAPUtils method populateSOAPBody.

@SuppressWarnings("unchecked")
private static void populateSOAPBody(SOAPEnvelope soapEnvelope, ElementExtensible bindingInput, boolean soap12, SOAPFactory soapFactory, Operation operation, Message messageDefinition, org.apache.ode.bpel.iapi.Message messageFromODE, boolean isRPC, boolean isRequest) throws BPELFault {
    if (soap12) {
        SOAP12Body soapBodyDefinition = getSOAP12Body(bindingInput);
        if (soapBodyDefinition != null) {
            SOAPBody soapBody;
            if (soapEnvelope.getBody() != null) {
                soapBody = soapEnvelope.getBody();
            } else {
                soapBody = soapFactory.createSOAPBody(soapEnvelope);
            }
            OMElement partHolder;
            if (isRPC) {
                String rpcWrapperElementName;
                if (isRequest) {
                    rpcWrapperElementName = operation.getName();
                } else {
                    rpcWrapperElementName = operation.getName() + "Response";
                }
                partHolder = createRPCWrapperElement(soapBody, soapFactory, new QName(soapBodyDefinition.getNamespaceURI(), rpcWrapperElementName));
            } else {
                partHolder = soapBody;
            }
            List<Part> parts = messageDefinition.getOrderedParts(soapBodyDefinition.getParts());
            for (Part p : parts) {
                Element partContent = DOMUtils.findChildByName(messageFromODE.getMessage(), new QName(null, p.getName()));
                if (partContent == null) {
                    throw new BPELFault("Missing required part in ODE Message: " + new QName(null, p.getName()));
                }
                OMElement omPartContent = OMUtils.toOM(partContent, soapFactory);
                if (isRPC) {
                    partHolder.addChild(omPartContent);
                } else {
                    for (Iterator<OMNode> i = omPartContent.getChildren(); i.hasNext(); ) {
                        partHolder.addChild(i.next());
                    }
                }
            }
        }
    } else {
        javax.wsdl.extensions.soap.SOAPBody soapBodyDefinition = getSOAP11Body(bindingInput);
        if (soapBodyDefinition != null) {
            SOAPBody soapBody;
            if (soapEnvelope.getBody() != null) {
                soapBody = soapEnvelope.getBody();
            } else {
                soapBody = soapFactory.createSOAPBody(soapEnvelope);
            }
            OMElement partHolder;
            if (isRPC) {
                String rpcWrapperElementName;
                if (isRequest) {
                    rpcWrapperElementName = operation.getName();
                } else {
                    rpcWrapperElementName = operation.getName() + "Response";
                }
                partHolder = createRPCWrapperElement(soapBody, soapFactory, new QName(soapBodyDefinition.getNamespaceURI(), rpcWrapperElementName));
            } else {
                partHolder = soapBody;
            }
            List<Part> parts = messageDefinition.getOrderedParts(soapBodyDefinition.getParts());
            for (Part p : parts) {
                Element partContent = DOMUtils.findChildByName(messageFromODE.getMessage(), new QName(null, p.getName()));
                if (partContent == null) {
                    throw new BPELFault("Missing required part in ODE Message: " + new QName(null, p.getName()));
                }
                OMElement omPartContent = OMUtils.toOM(partContent, soapFactory);
                if (isRPC) {
                    partHolder.addChild(omPartContent);
                } else {
                    for (Iterator<OMNode> i = omPartContent.getChildren(); i.hasNext(); ) {
                        partHolder.addChild(i.next());
                    }
                }
            }
        }
    }
}
Also used : SOAP12Body(javax.wsdl.extensions.soap12.SOAP12Body) BPELFault(org.wso2.carbon.bpel.core.ode.integration.BPELFault) QName(javax.xml.namespace.QName) OMElement(org.apache.axiom.om.OMElement) Element(org.w3c.dom.Element) OMElement(org.apache.axiom.om.OMElement) OMNode(org.apache.axiom.om.OMNode) SOAPBody(org.apache.axiom.soap.SOAPBody) Part(javax.wsdl.Part)

Example 23 with Part

use of javax.wsdl.Part in project carbon-business-process by wso2.

the class WSDLAwareSOAPProcessor method processMessageParts.

private WSDLAwareMessage processMessageParts(BindingInput bindingInput) throws AxisFault {
    WSDLAwareMessage message = new WSDLAwareMessage();
    message.setBinding(wsdlBinding);
    List parts;
    String namespace;
    if (soap12) {
        SOAP12Body soapBodyDef = getFirstExtensibilityElement(bindingInput, SOAP12Body.class);
        if (soapBodyDef == null) {
            String errMessage = "SOAPBody null for binding input.";
            log.error(errMessage);
            throw new AxisFault(errMessage);
        }
        parts = soapBodyDef.getParts();
        namespace = soapBodyDef.getNamespaceURI();
    } else {
        SOAPBody soapBodyDef = getFirstExtensibilityElement(bindingInput, SOAPBody.class);
        if (soapBodyDef == null) {
            String errMessage = "SOAPBody null for binding input.";
            log.error(errMessage);
            throw new AxisFault(errMessage);
        }
        parts = soapBodyDef.getParts();
        namespace = soapBodyDef.getNamespaceURI();
    }
    QName axisOperationName = inMessageCtx.getAxisOperation().getName();
    /**
     * Local part of the axis Operation's name equals to WSDL Operation name.
     */
    Operation op = wsdlBinding.getPortType().getOperation(axisOperationName.getLocalPart(), null, null);
    String rpcWrapper = op.getName();
    List bodyParts = op.getInput().getMessage().getOrderedParts(parts);
    if (isRPC) {
        message.setRPC(true);
        QName rpWrapperQName = new QName(namespace, rpcWrapper);
        OMElement partWrapper = inMessageCtx.getEnvelope().getBody().getFirstChildWithName(rpWrapperQName);
        if (partWrapper == null) {
            String errMsg = "SOAP Body doesn't contain expected part wrapper.";
            log.error(errMsg);
            throw new AxisFault(errMsg);
        }
        /* In RPC the body element is the operation name, wrapping parts. Order doesn't really
             * matter as far as we're concerned. All we need to do is copy the soap:body children,
             * since doc-lit rpc looks the same in ode and soap.*/
        for (Object partDef : bodyParts) {
            OMElement srcPart = partWrapper.getFirstChildWithName(new QName(null, ((Part) partDef).getName()));
            if (srcPart == null) {
                throw new AxisFault("SOAP Body doesn't contain required part " + ((Part) partDef).getName() + ".");
            }
            message.addBodyPart(srcPart.getLocalName(), srcPart);
        }
    } else {
        /**
         * In doc-literal style, we expect the elements in the body to correspond (in order) to
         * the parts defined in the binding. All the parts should be element-typed, otherwise
         * it is a mess.
         */
        message.setRPC(false);
        Iterator srcParts = inMessageCtx.getEnvelope().getBody().getChildElements();
        for (Object partDef : bodyParts) {
            if (!srcParts.hasNext()) {
                throw new AxisFault("SOAP Body does not contain required part" + ((Part) partDef).getName() + ".");
            }
            OMElement srcPart = (OMElement) srcParts.next();
            if (((Part) partDef).getElementName() == null) {
                throw new AxisFault("Binding defines non-element document literal part(s)");
            }
            if (!srcPart.getQName().equals(((Part) partDef).getElementName())) {
                throw new AxisFault("Unexpected element in SOAP body.");
            }
            message.addBodyPart(((Part) partDef).getName(), srcPart);
        }
    }
    processSoapHeaderParts(message, bindingInput, op);
    return message;
}
Also used : AxisFault(org.apache.axis2.AxisFault) SOAPBody(javax.wsdl.extensions.soap.SOAPBody) SOAP12Body(javax.wsdl.extensions.soap12.SOAP12Body) QName(javax.xml.namespace.QName) Part(javax.wsdl.Part) Iterator(java.util.Iterator) ArrayList(java.util.ArrayList) List(java.util.List) OMElement(org.apache.axiom.om.OMElement) Operation(javax.wsdl.Operation) BindingOperation(javax.wsdl.BindingOperation)

Example 24 with Part

use of javax.wsdl.Part in project carbon-business-process by wso2.

the class WSDLAwareSOAPProcessor method handleSoapHeaderPartDef.

private void handleSoapHeaderPartDef(WSDLAwareMessage message, SOAPHeader headerDef, Message msgType, org.apache.axiom.soap.SOAPHeader soapHeader) throws AxisFault {
    boolean payloadMessageHeader = headerDef.getMessage() == null || headerDef.getMessage().equals(msgType.getQName());
    boolean requiredHeader = payloadMessageHeader || (headerDef.getRequired() != null && headerDef.getRequired());
    if (requiredHeader && soapHeader == null) {
        throw new AxisFault("Missing required SOAP header element.");
    }
    if (soapHeader == null) {
        return;
    }
    Message headerMsg = wsdlDef.getMessage(headerDef.getMessage());
    if (headerMsg == null) {
        return;
    }
    Part p = headerMsg.getPart(headerDef.getPart());
    if (p == null || p.getElementName() == null) {
        return;
    }
    OMElement headerEl = soapHeader.getFirstChildWithName(p.getElementName());
    if (requiredHeader && headerEl == null) {
        throw new AxisFault("Missing required SOAP header element.");
    }
    if (headerEl == null) {
        return;
    }
    message.addHeaderPart(p.getName(), headerEl);
}
Also used : AxisFault(org.apache.axis2.AxisFault) Message(javax.wsdl.Message) Part(javax.wsdl.Part) OMElement(org.apache.axiom.om.OMElement)

Example 25 with Part

use of javax.wsdl.Part in project carbon-business-process by wso2.

the class SOAPHelper method createSoapBody.

public void createSoapBody(org.apache.axiom.soap.SOAPBody sb, SOAPBody soapBody, Message msgDef, Element message, String rpcWrapper) throws AxisFault {
    OMElement partHolder = isRPC ? soapFactory.createOMElement(new QName(soapBody.getNamespaceURI(), rpcWrapper, "odens"), sb) : sb;
    List<Part> parts = msgDef.getOrderedParts(soapBody.getParts());
    for (Part part : parts) {
        Element srcPartEl = DOMUtils.findChildByName(message, new QName(null, part.getName()));
        if (srcPartEl == null) {
            throw new AxisFault("Missing required part in ODE Message");
        }
        OMElement omPart = OMUtils.toOM(srcPartEl, soapFactory);
        if (isRPC) {
            partHolder.addChild(omPart);
        } else {
            for (Iterator<OMNode> i = omPart.getChildren(); i.hasNext(); ) {
                partHolder.addChild(i.next());
            }
        }
    }
}
Also used : AxisFault(org.apache.axis2.AxisFault) OMNode(org.apache.axiom.om.OMNode) QName(javax.xml.namespace.QName) Part(javax.wsdl.Part) OMElement(org.apache.axiom.om.OMElement) ExtensibilityElement(javax.wsdl.extensions.ExtensibilityElement) Element(org.w3c.dom.Element) OMElement(org.apache.axiom.om.OMElement)

Aggregations

Part (javax.wsdl.Part)49 QName (javax.xml.namespace.QName)30 Message (javax.wsdl.Message)21 Operation (javax.wsdl.Operation)11 BindingOperation (javax.wsdl.BindingOperation)9 Input (javax.wsdl.Input)9 Output (javax.wsdl.Output)7 OMElement (org.apache.axiom.om.OMElement)7 Element (org.w3c.dom.Element)7 ArrayList (java.util.ArrayList)6 Binding (javax.wsdl.Binding)6 OpenEJBException (org.apache.openejb.OpenEJBException)6 XmlSchemaElement (org.apache.ws.commons.schema.XmlSchemaElement)6 Fault (javax.wsdl.Fault)5 Port (javax.wsdl.Port)5 Service (javax.wsdl.Service)5 MIMEPart (javax.wsdl.extensions.mime.MIMEPart)5 List (java.util.List)4 BindingInput (javax.wsdl.BindingInput)4 PortType (javax.wsdl.PortType)4