Search in sources :

Example 6 with CheckedExceptionImpl

use of com.sun.xml.ws.model.CheckedExceptionImpl in project metro-jax-ws by eclipse-ee4j.

the class WSDLGenerator method generateSOAP12BindingOperation.

protected void generateSOAP12BindingOperation(JavaMethodImpl method, Binding binding) {
    BindingOperationType operation = binding.operation().name(method.getOperationName());
    extension.addBindingOperationExtension(operation, method);
    String targetNamespace = model.getTargetNamespace();
    QName requestMessage = new QName(targetNamespace, method.getOperationName());
    ArrayList<ParameterImpl> bodyParams = new ArrayList<>();
    ArrayList<ParameterImpl> headerParams = new ArrayList<>();
    splitParameters(bodyParams, headerParams, method.getRequestParameters());
    SOAPBinding soapBinding = method.getBinding();
    String soapAction = soapBinding.getSOAPAction();
    if (soapAction != null) {
        operation.soap12Operation().soapAction(soapAction);
    }
    // input
    TypedXmlWriter input = operation.input();
    extension.addBindingOperationInputExtension(input, method);
    com.sun.xml.ws.wsdl.writer.document.soap12.BodyType body = input._element(com.sun.xml.ws.wsdl.writer.document.soap12.Body.class);
    boolean isRpc = soapBinding.getStyle().equals(Style.RPC);
    if (soapBinding.getUse().equals(Use.LITERAL)) {
        body.use(LITERAL);
        if (headerParams.size() > 0) {
            if (bodyParams.size() > 0) {
                ParameterImpl param = bodyParams.iterator().next();
                if (isRpc) {
                    StringBuilder parts = new StringBuilder();
                    int i = 0;
                    for (ParameterImpl parameter : ((WrapperParameter) param).getWrapperChildren()) {
                        if (i++ > 0)
                            parts.append(' ');
                        parts.append(parameter.getPartName());
                    }
                    body.parts(parts.toString());
                } else {
                    body.parts(param.getPartName());
                }
            } else {
                body.parts("");
            }
            generateSOAP12Headers(input, headerParams, requestMessage);
        }
        if (isRpc) {
            body.namespace(method.getRequestParameters().iterator().next().getName().getNamespaceURI());
        }
    } else {
        // TODO localize this
        throw new WebServiceException("encoded use is not supported");
    }
    if (method.getMEP() != MEP.ONE_WAY) {
        // output
        bodyParams.clear();
        headerParams.clear();
        splitParameters(bodyParams, headerParams, method.getResponseParameters());
        TypedXmlWriter output = operation.output();
        extension.addBindingOperationOutputExtension(output, method);
        body = output._element(com.sun.xml.ws.wsdl.writer.document.soap12.Body.class);
        body.use(LITERAL);
        if (headerParams.size() > 0) {
            if (bodyParams.size() > 0) {
                ParameterImpl param = bodyParams.iterator().next();
                if (isRpc) {
                    StringBuilder parts = new StringBuilder();
                    int i = 0;
                    for (ParameterImpl parameter : ((WrapperParameter) param).getWrapperChildren()) {
                        if (i++ > 0) {
                            parts.append(" ");
                        }
                        parts.append(parameter.getPartName());
                    }
                    body.parts(parts.toString());
                } else {
                    body.parts(param.getPartName());
                }
            } else {
                body.parts("");
            }
            QName responseMessage = new QName(targetNamespace, method.getResponseMessageName());
            generateSOAP12Headers(output, headerParams, responseMessage);
        }
        if (isRpc) {
            body.namespace(method.getRequestParameters().iterator().next().getName().getNamespaceURI());
        }
    }
    for (CheckedExceptionImpl exception : method.getCheckedExceptions()) {
        Fault fault = operation.fault().name(exception.getMessageName());
        extension.addBindingOperationFaultExtension(fault, method, exception);
        com.sun.xml.ws.wsdl.writer.document.soap12.SOAPFault soapFault = fault._element(com.sun.xml.ws.wsdl.writer.document.soap12.SOAPFault.class).name(exception.getMessageName());
        soapFault.use(LITERAL);
    }
}
Also used : BindingOperationType(com.sun.xml.ws.wsdl.writer.document.BindingOperationType) ArrayList(java.util.ArrayList) CheckedExceptionImpl(com.sun.xml.ws.model.CheckedExceptionImpl) WrapperParameter(com.sun.xml.ws.model.WrapperParameter) Fault(com.sun.xml.ws.wsdl.writer.document.Fault) SOAPFault(com.sun.xml.ws.wsdl.writer.document.soap.SOAPFault) TypedXmlWriter(com.sun.xml.txw2.TypedXmlWriter) Body(com.sun.xml.ws.wsdl.writer.document.soap.Body) WebServiceException(jakarta.xml.ws.WebServiceException) QName(javax.xml.namespace.QName) SOAPBinding(com.sun.xml.ws.api.model.soap.SOAPBinding) ParameterImpl(com.sun.xml.ws.model.ParameterImpl) SOAPFault(com.sun.xml.ws.wsdl.writer.document.soap.SOAPFault)

Aggregations

CheckedExceptionImpl (com.sun.xml.ws.model.CheckedExceptionImpl)6 QName (javax.xml.namespace.QName)5 WebServiceException (jakarta.xml.ws.WebServiceException)4 ParameterImpl (com.sun.xml.ws.model.ParameterImpl)3 WrapperParameter (com.sun.xml.ws.model.WrapperParameter)3 TypedXmlWriter (com.sun.xml.txw2.TypedXmlWriter)2 SOAPBinding (com.sun.xml.ws.api.model.soap.SOAPBinding)2 JavaMethodImpl (com.sun.xml.ws.model.JavaMethodImpl)2 BindingOperationType (com.sun.xml.ws.wsdl.writer.document.BindingOperationType)2 Fault (com.sun.xml.ws.wsdl.writer.document.Fault)2 Body (com.sun.xml.ws.wsdl.writer.document.soap.Body)2 SOAPFault (com.sun.xml.ws.wsdl.writer.document.soap.SOAPFault)2 ArrayList (java.util.ArrayList)2 WSDLOperationMapping (com.sun.xml.ws.api.model.WSDLOperationMapping)1 SerializationException (com.sun.xml.ws.encoding.soap.SerializationException)1 BindingContext (com.sun.xml.ws.spi.db.BindingContext)1 FaultType (com.sun.xml.ws.wsdl.writer.document.FaultType)1 Message (com.sun.xml.ws.wsdl.writer.document.Message)1 Operation (com.sun.xml.ws.wsdl.writer.document.Operation)1 PortType (com.sun.xml.ws.wsdl.writer.document.PortType)1