Search in sources :

Example 11 with Part

use of javax.wsdl.Part in project cxf by apache.

the class ServiceWSDLBuilder method buildService.

protected void buildService(ServiceInfo serviceInfo, Definition definition) {
    Map<QName, MessageInfo> messages = serviceInfo.getMessages();
    for (Map.Entry<QName, MessageInfo> mie : messages.entrySet()) {
        if (!mie.getKey().getNamespaceURI().equals(definition.getTargetNamespace())) {
            continue;
        }
        if (definition.getMessage(mie.getKey()) != null) {
            continue;
        }
        Message message = definition.createMessage();
        addDocumentation(message, mie.getValue().getMessageDocumentation());
        message.setUndefined(false);
        message.setQName(mie.getKey());
        for (MessagePartInfo mpi : mie.getValue().getMessageParts()) {
            Part part = definition.createPart();
            boolean elemental = mpi.isElement();
            // RFSB will turn on isElement bogusly.
            if (elemental && null == serviceInfo.getXmlSchemaCollection().getElementByQName(mpi.getElementQName())) {
                elemental = false;
            }
            if (elemental) {
                part.setElementName(mpi.getElementQName());
            } else {
                part.setTypeName(mpi.getTypeQName());
            }
            part.setName(mpi.getName().getLocalPart());
            message.addPart(part);
        }
        definition.addMessage(message);
    }
    addDocumentation(definition, serviceInfo.getTopLevelDoc());
    Service serv = definition.createService();
    addDocumentation(serv, serviceInfo.getDocumentation());
    serv.setQName(serviceInfo.getName());
    addNamespace(serviceInfo.getName().getNamespaceURI(), definition);
    addExtensibilityElements(definition, serv, getWSDL11Extensors(serviceInfo));
    definition.addService(serv);
    for (EndpointInfo ei : serviceInfo.getEndpoints()) {
        addNamespace(ei.getTransportId(), definition);
        Port port = definition.createPort();
        addDocumentation(port, ei.getDocumentation());
        port.setName(ei.getName().getLocalPart());
        port.setBinding(definition.getBinding(ei.getBinding().getName()));
        addExtensibilityElements(definition, port, getWSDL11Extensors(ei));
        serv.addPort(port);
    }
}
Also used : EndpointInfo(org.apache.cxf.service.model.EndpointInfo) Message(javax.wsdl.Message) QName(javax.xml.namespace.QName) Part(javax.wsdl.Part) Port(javax.wsdl.Port) Service(javax.wsdl.Service) Map(java.util.Map) HashMap(java.util.HashMap) MessagePartInfo(org.apache.cxf.service.model.MessagePartInfo) MessageInfo(org.apache.cxf.service.model.MessageInfo) BindingMessageInfo(org.apache.cxf.service.model.BindingMessageInfo)

Example 12 with Part

use of javax.wsdl.Part in project cxf by apache.

the class WSDLServiceBuilder method buildMessage.

private void buildMessage(AbstractMessageContainer minfo, Message msg) {
    SchemaCollection schemas = minfo.getOperation().getInterface().getService().getXmlSchemaCollection();
    List<?> orderedParam = msg.getOrderedParts(null);
    for (Part part : cast(orderedParam, Part.class)) {
        MessagePartInfo pi = minfo.addMessagePart(new QName(minfo.getName().getNamespaceURI(), part.getName()));
        if (part.getTypeName() != null) {
            pi.setTypeQName(part.getTypeName());
            pi.setElement(false);
            pi.setXmlSchema(schemas.getTypeByQName(part.getTypeName()));
        } else if (part.getElementName() != null) {
            pi.setElementQName(part.getElementName());
            XmlSchemaElement schemaElement = schemas.getElementByQName(part.getElementName());
            if (null == schemaElement) {
                org.apache.cxf.common.i18n.Message errorMessage = new org.apache.cxf.common.i18n.Message("WSDL4J_BAD_ELEMENT_PART", LOG, part.getName(), part.getElementName());
                throw new WSDLRuntimeException(errorMessage);
            }
            pi.setElement(true);
            pi.setXmlSchema(schemaElement);
        } else {
            org.apache.cxf.common.i18n.Message errorMessage = new org.apache.cxf.common.i18n.Message("PART_NO_NAME_NO_TYPE", LOG, part.getName());
            throw new WSDLRuntimeException(errorMessage);
        }
    }
}
Also used : Message(javax.wsdl.Message) QName(javax.xml.namespace.QName) XmlSchemaElement(org.apache.ws.commons.schema.XmlSchemaElement) MessagePartInfo(org.apache.cxf.service.model.MessagePartInfo) Part(javax.wsdl.Part) SchemaCollection(org.apache.cxf.common.xmlschema.SchemaCollection)

Example 13 with Part

use of javax.wsdl.Part in project cxf by apache.

the class WSDLManagerImplTest method testBuildImportedWSDL.

@Test
public void testBuildImportedWSDL() throws Exception {
    String wsdlUrl = getClass().getResource("hello_world_services.wsdl").toString();
    WSDLManagerImpl builder = new WSDLManagerImpl();
    Definition def = builder.getDefinition(wsdlUrl);
    assertNotNull(def);
    Map<?, ?> services = def.getServices();
    assertNotNull(services);
    assertEquals(1, services.size());
    String serviceQName = "http://apache.org/hello_world/services";
    Service service = (Service) services.get(new QName(serviceQName, "SOAPService"));
    assertNotNull(service);
    Map<?, ?> ports = service.getPorts();
    assertNotNull(ports);
    assertEquals(1, ports.size());
    Port port = service.getPort("SoapPort");
    assertNotNull(port);
    Binding binding = port.getBinding();
    assertNotNull(binding);
    QName bindingQName = new QName("http://apache.org/hello_world/bindings", "SOAPBinding");
    assertEquals(bindingQName, binding.getQName());
    PortType portType = binding.getPortType();
    assertNotNull(portType);
    QName portTypeQName = new QName("http://apache.org/hello_world", "Greeter");
    assertEquals(portTypeQName, portType.getQName());
    Operation op1 = portType.getOperation("sayHi", "sayHiRequest", "sayHiResponse");
    assertNotNull(op1);
    QName messageQName = new QName("http://apache.org/hello_world/messages", "sayHiRequest");
    assertEquals(messageQName, op1.getInput().getMessage().getQName());
    Part part = op1.getInput().getMessage().getPart("in");
    assertNotNull(part);
    assertEquals(new QName("http://apache.org/hello_world/types", "sayHi"), part.getElementName());
}
Also used : Binding(javax.wsdl.Binding) QName(javax.xml.namespace.QName) Part(javax.wsdl.Part) Port(javax.wsdl.Port) Definition(javax.wsdl.Definition) Service(javax.wsdl.Service) Operation(javax.wsdl.Operation) PortType(javax.wsdl.PortType) Test(org.junit.Test)

Example 14 with Part

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

the class WSDL11ProcessorImpl method getParameters.

/**
 * Returns parameters, given http binding operation, verb and content type
 *
 * @param bindingOperation {@link BindingOperation} object
 * @param verb             HTTP verb
 * @param contentType      Content type
 * @return parameters, given http binding operation, verb and content type
 */
private List<WSDLOperationParam> getParameters(BindingOperation bindingOperation, String verb, String contentType) {
    List<WSDLOperationParam> params = new ArrayList<>();
    Operation operation = bindingOperation.getOperation();
    // or content type is not provided
    if (APIMWSDLUtils.canContainBody(verb) && !APIMWSDLUtils.hasFormDataParams(contentType)) {
        WSDLOperationParam param = new WSDLOperationParam();
        param.setName("Payload");
        param.setParamType(WSDLOperationParam.ParamTypeEnum.BODY);
        params.add(param);
        if (log.isDebugEnabled()) {
            log.debug("Adding default Param for operation:" + operation.getName() + ", contentType: " + contentType);
        }
        return params;
    }
    if (operation != null) {
        Input input = operation.getInput();
        if (input != null) {
            Message message = input.getMessage();
            if (message != null) {
                Map map = message.getParts();
                map.forEach((name, partObj) -> {
                    WSDLOperationParam param = new WSDLOperationParam();
                    param.setName(name.toString());
                    if (log.isDebugEnabled()) {
                        log.debug("Identified param for operation: " + operation.getName() + " param: " + name);
                    }
                    if (APIMWSDLUtils.canContainBody(verb)) {
                        if (log.isDebugEnabled()) {
                            log.debug("Operation " + operation.getName() + " can contain a body.");
                        }
                        // In POST, PUT operations, parameters always in body according to HTTP Binding spec
                        if (APIMWSDLUtils.hasFormDataParams(contentType)) {
                            param.setParamType(WSDLOperationParam.ParamTypeEnum.FORM_DATA);
                            if (log.isDebugEnabled()) {
                                log.debug("Param " + name + " type was set to formData.");
                            }
                        }
                    // no else block since if content type is not form-data related, there can be only one
                    // parameter which is payload body. This is handled in the first if block which is
                    // if (canContainBody(verb) && !hasFormDataParams(contentType)) { .. }
                    } else {
                        // In GET operations, parameters always query or path as per HTTP Binding spec
                        if (isUrlReplacement(bindingOperation)) {
                            param.setParamType(WSDLOperationParam.ParamTypeEnum.PATH);
                            if (log.isDebugEnabled()) {
                                log.debug("Param " + name + " type was set to Path.");
                            }
                        } else {
                            param.setParamType(WSDLOperationParam.ParamTypeEnum.QUERY);
                            if (log.isDebugEnabled()) {
                                log.debug("Param " + name + " type was set to Query.");
                            }
                        }
                    }
                    Part part = (Part) partObj;
                    param.setDataType(part.getTypeName().getLocalPart());
                    if (log.isDebugEnabled()) {
                        log.debug("Param " + name + " data type was set to " + param.getDataType());
                    }
                    params.add(param);
                });
            }
        }
    }
    return params;
}
Also used : WSDLOperationParam(org.wso2.carbon.apimgt.core.models.WSDLOperationParam) Input(javax.wsdl.Input) BindingInput(javax.wsdl.BindingInput) Message(javax.wsdl.Message) Part(javax.wsdl.Part) ArrayList(java.util.ArrayList) Operation(javax.wsdl.Operation) HTTPOperation(javax.wsdl.extensions.http.HTTPOperation) BindingOperation(javax.wsdl.BindingOperation) WSDLOperation(org.wso2.carbon.apimgt.core.models.WSDLOperation) Map(java.util.Map) HashMap(java.util.HashMap)

Example 15 with Part

use of javax.wsdl.Part in project cxf by apache.

the class WSDLRefValidator method collectValidationPointsForMessages.

private void collectValidationPointsForMessages() {
    for (QName msgName : messageRefNames) {
        javax.wsdl.Message message = getMessage(msgName);
        for (Iterator<?> iter = message.getParts().values().iterator(); iter.hasNext(); ) {
            Part part = (Part) iter.next();
            QName elementName = part.getElementName();
            QName typeName = part.getTypeName();
            if (elementName == null && typeName == null) {
                vResults.addError(new Message("PART_NO_TYPES", LOG));
                continue;
            }
            if (elementName != null && typeName != null) {
                vResults.addError(new Message("PART_NOT_UNIQUE", LOG));
                continue;
            }
            if (elementName != null && typeName == null) {
                boolean valid = validatePartType(elementName.getNamespaceURI(), elementName.getLocalPart(), true);
                if (!valid) {
                    vResults.addError(new Message("TYPE_REF_NOT_FOUND", LOG, message.getQName(), part.getName(), elementName));
                }
            }
            if (typeName != null && elementName == null) {
                boolean valid = validatePartType(typeName.getNamespaceURI(), typeName.getLocalPart(), false);
                if (!valid) {
                    vResults.addError(new Message("TYPE_REF_NOT_FOUND", LOG, message.getQName(), part.getName(), typeName));
                }
            }
        }
    }
}
Also used : XMessage(org.apache.cxf.tools.validator.internal.model.XMessage) Message(org.apache.cxf.common.i18n.Message) QName(javax.xml.namespace.QName) Part(javax.wsdl.Part)

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