jaxws/src/java.xml.ws/share/classes/com/sun/xml/internal/ws/spi/db/ServiceArtifactSchemaGenerator.java
author mkos
Tue, 02 Dec 2014 15:03:49 +0100
changeset 27837 86d4f46e622a
permissions -rw-r--r--
8065870: Update JAX-WS RI integration to latest version (2.2.11-b141124.1933) Reviewed-by: smarks
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
27837
86d4f46e622a 8065870: Update JAX-WS RI integration to latest version (2.2.11-b141124.1933)
mkos
parents:
diff changeset
     1
/*
86d4f46e622a 8065870: Update JAX-WS RI integration to latest version (2.2.11-b141124.1933)
mkos
parents:
diff changeset
     2
 * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved.
86d4f46e622a 8065870: Update JAX-WS RI integration to latest version (2.2.11-b141124.1933)
mkos
parents:
diff changeset
     3
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
86d4f46e622a 8065870: Update JAX-WS RI integration to latest version (2.2.11-b141124.1933)
mkos
parents:
diff changeset
     4
 *
86d4f46e622a 8065870: Update JAX-WS RI integration to latest version (2.2.11-b141124.1933)
mkos
parents:
diff changeset
     5
 * This code is free software; you can redistribute it and/or modify it
86d4f46e622a 8065870: Update JAX-WS RI integration to latest version (2.2.11-b141124.1933)
mkos
parents:
diff changeset
     6
 * under the terms of the GNU General Public License version 2 only, as
86d4f46e622a 8065870: Update JAX-WS RI integration to latest version (2.2.11-b141124.1933)
mkos
parents:
diff changeset
     7
 * published by the Free Software Foundation.  Oracle designates this
86d4f46e622a 8065870: Update JAX-WS RI integration to latest version (2.2.11-b141124.1933)
mkos
parents:
diff changeset
     8
 * particular file as subject to the "Classpath" exception as provided
86d4f46e622a 8065870: Update JAX-WS RI integration to latest version (2.2.11-b141124.1933)
mkos
parents:
diff changeset
     9
 * by Oracle in the LICENSE file that accompanied this code.
86d4f46e622a 8065870: Update JAX-WS RI integration to latest version (2.2.11-b141124.1933)
mkos
parents:
diff changeset
    10
 *
86d4f46e622a 8065870: Update JAX-WS RI integration to latest version (2.2.11-b141124.1933)
mkos
parents:
diff changeset
    11
 * This code is distributed in the hope that it will be useful, but WITHOUT
86d4f46e622a 8065870: Update JAX-WS RI integration to latest version (2.2.11-b141124.1933)
mkos
parents:
diff changeset
    12
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
86d4f46e622a 8065870: Update JAX-WS RI integration to latest version (2.2.11-b141124.1933)
mkos
parents:
diff changeset
    13
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
86d4f46e622a 8065870: Update JAX-WS RI integration to latest version (2.2.11-b141124.1933)
mkos
parents:
diff changeset
    14
 * version 2 for more details (a copy is included in the LICENSE file that
86d4f46e622a 8065870: Update JAX-WS RI integration to latest version (2.2.11-b141124.1933)
mkos
parents:
diff changeset
    15
 * accompanied this code).
86d4f46e622a 8065870: Update JAX-WS RI integration to latest version (2.2.11-b141124.1933)
mkos
parents:
diff changeset
    16
 *
86d4f46e622a 8065870: Update JAX-WS RI integration to latest version (2.2.11-b141124.1933)
mkos
parents:
diff changeset
    17
 * You should have received a copy of the GNU General Public License version
86d4f46e622a 8065870: Update JAX-WS RI integration to latest version (2.2.11-b141124.1933)
mkos
parents:
diff changeset
    18
 * 2 along with this work; if not, write to the Free Software Foundation,
86d4f46e622a 8065870: Update JAX-WS RI integration to latest version (2.2.11-b141124.1933)
mkos
parents:
diff changeset
    19
 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
86d4f46e622a 8065870: Update JAX-WS RI integration to latest version (2.2.11-b141124.1933)
mkos
parents:
diff changeset
    20
 *
86d4f46e622a 8065870: Update JAX-WS RI integration to latest version (2.2.11-b141124.1933)
mkos
parents:
diff changeset
    21
 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
86d4f46e622a 8065870: Update JAX-WS RI integration to latest version (2.2.11-b141124.1933)
mkos
parents:
diff changeset
    22
 * or visit www.oracle.com if you need additional information or have any
86d4f46e622a 8065870: Update JAX-WS RI integration to latest version (2.2.11-b141124.1933)
mkos
parents:
diff changeset
    23
 * questions.
86d4f46e622a 8065870: Update JAX-WS RI integration to latest version (2.2.11-b141124.1933)
mkos
parents:
diff changeset
    24
 */
86d4f46e622a 8065870: Update JAX-WS RI integration to latest version (2.2.11-b141124.1933)
mkos
parents:
diff changeset
    25
86d4f46e622a 8065870: Update JAX-WS RI integration to latest version (2.2.11-b141124.1933)
mkos
parents:
diff changeset
    26
package com.sun.xml.internal.ws.spi.db;
86d4f46e622a 8065870: Update JAX-WS RI integration to latest version (2.2.11-b141124.1933)
mkos
parents:
diff changeset
    27
86d4f46e622a 8065870: Update JAX-WS RI integration to latest version (2.2.11-b141124.1933)
mkos
parents:
diff changeset
    28
import static com.sun.xml.internal.ws.model.RuntimeModeler.DocWrappeeNamespapceQualified;
86d4f46e622a 8065870: Update JAX-WS RI integration to latest version (2.2.11-b141124.1933)
mkos
parents:
diff changeset
    29
86d4f46e622a 8065870: Update JAX-WS RI integration to latest version (2.2.11-b141124.1933)
mkos
parents:
diff changeset
    30
import java.io.IOException;
86d4f46e622a 8065870: Update JAX-WS RI integration to latest version (2.2.11-b141124.1933)
mkos
parents:
diff changeset
    31
import java.util.ArrayList;
86d4f46e622a 8065870: Update JAX-WS RI integration to latest version (2.2.11-b141124.1933)
mkos
parents:
diff changeset
    32
import java.util.Map.Entry;
86d4f46e622a 8065870: Update JAX-WS RI integration to latest version (2.2.11-b141124.1933)
mkos
parents:
diff changeset
    33
import java.util.HashMap;
86d4f46e622a 8065870: Update JAX-WS RI integration to latest version (2.2.11-b141124.1933)
mkos
parents:
diff changeset
    34
import java.util.HashSet;
86d4f46e622a 8065870: Update JAX-WS RI integration to latest version (2.2.11-b141124.1933)
mkos
parents:
diff changeset
    35
import java.util.List;
86d4f46e622a 8065870: Update JAX-WS RI integration to latest version (2.2.11-b141124.1933)
mkos
parents:
diff changeset
    36
import java.util.Set;
86d4f46e622a 8065870: Update JAX-WS RI integration to latest version (2.2.11-b141124.1933)
mkos
parents:
diff changeset
    37
86d4f46e622a 8065870: Update JAX-WS RI integration to latest version (2.2.11-b141124.1933)
mkos
parents:
diff changeset
    38
import static com.sun.xml.internal.ws.wsdl.writer.WSDLGenerator.XsdNs;
86d4f46e622a 8065870: Update JAX-WS RI integration to latest version (2.2.11-b141124.1933)
mkos
parents:
diff changeset
    39
86d4f46e622a 8065870: Update JAX-WS RI integration to latest version (2.2.11-b141124.1933)
mkos
parents:
diff changeset
    40
import javax.xml.bind.JAXBException;
86d4f46e622a 8065870: Update JAX-WS RI integration to latest version (2.2.11-b141124.1933)
mkos
parents:
diff changeset
    41
import javax.xml.bind.SchemaOutputResolver;
86d4f46e622a 8065870: Update JAX-WS RI integration to latest version (2.2.11-b141124.1933)
mkos
parents:
diff changeset
    42
import javax.xml.namespace.QName;
86d4f46e622a 8065870: Update JAX-WS RI integration to latest version (2.2.11-b141124.1933)
mkos
parents:
diff changeset
    43
import javax.xml.transform.Result;
86d4f46e622a 8065870: Update JAX-WS RI integration to latest version (2.2.11-b141124.1933)
mkos
parents:
diff changeset
    44
import javax.xml.ws.WebServiceException;
86d4f46e622a 8065870: Update JAX-WS RI integration to latest version (2.2.11-b141124.1933)
mkos
parents:
diff changeset
    45
86d4f46e622a 8065870: Update JAX-WS RI integration to latest version (2.2.11-b141124.1933)
mkos
parents:
diff changeset
    46
import com.sun.xml.internal.bind.v2.schemagen.xmlschema.ComplexType;
86d4f46e622a 8065870: Update JAX-WS RI integration to latest version (2.2.11-b141124.1933)
mkos
parents:
diff changeset
    47
import com.sun.xml.internal.bind.v2.schemagen.xmlschema.Element;
86d4f46e622a 8065870: Update JAX-WS RI integration to latest version (2.2.11-b141124.1933)
mkos
parents:
diff changeset
    48
import com.sun.xml.internal.bind.v2.schemagen.xmlschema.ExplicitGroup;
86d4f46e622a 8065870: Update JAX-WS RI integration to latest version (2.2.11-b141124.1933)
mkos
parents:
diff changeset
    49
import com.sun.xml.internal.bind.v2.schemagen.xmlschema.LocalElement;
86d4f46e622a 8065870: Update JAX-WS RI integration to latest version (2.2.11-b141124.1933)
mkos
parents:
diff changeset
    50
import com.sun.xml.internal.bind.v2.schemagen.xmlschema.Occurs;
86d4f46e622a 8065870: Update JAX-WS RI integration to latest version (2.2.11-b141124.1933)
mkos
parents:
diff changeset
    51
import com.sun.xml.internal.txw2.TXW;
86d4f46e622a 8065870: Update JAX-WS RI integration to latest version (2.2.11-b141124.1933)
mkos
parents:
diff changeset
    52
import com.sun.xml.internal.txw2.output.ResultFactory;
86d4f46e622a 8065870: Update JAX-WS RI integration to latest version (2.2.11-b141124.1933)
mkos
parents:
diff changeset
    53
import com.sun.xml.internal.ws.api.model.SEIModel;
86d4f46e622a 8065870: Update JAX-WS RI integration to latest version (2.2.11-b141124.1933)
mkos
parents:
diff changeset
    54
import com.sun.xml.internal.ws.model.AbstractSEIModelImpl;
86d4f46e622a 8065870: Update JAX-WS RI integration to latest version (2.2.11-b141124.1933)
mkos
parents:
diff changeset
    55
import com.sun.xml.internal.ws.model.JavaMethodImpl;
86d4f46e622a 8065870: Update JAX-WS RI integration to latest version (2.2.11-b141124.1933)
mkos
parents:
diff changeset
    56
import com.sun.xml.internal.ws.model.ParameterImpl;
86d4f46e622a 8065870: Update JAX-WS RI integration to latest version (2.2.11-b141124.1933)
mkos
parents:
diff changeset
    57
import com.sun.xml.internal.ws.model.WrapperParameter;
86d4f46e622a 8065870: Update JAX-WS RI integration to latest version (2.2.11-b141124.1933)
mkos
parents:
diff changeset
    58
import com.sun.xml.internal.ws.wsdl.writer.document.xsd.Schema;
86d4f46e622a 8065870: Update JAX-WS RI integration to latest version (2.2.11-b141124.1933)
mkos
parents:
diff changeset
    59
86d4f46e622a 8065870: Update JAX-WS RI integration to latest version (2.2.11-b141124.1933)
mkos
parents:
diff changeset
    60
/**
86d4f46e622a 8065870: Update JAX-WS RI integration to latest version (2.2.11-b141124.1933)
mkos
parents:
diff changeset
    61
 * ServiceArtifactSchemaGenerator generates XML schema for service artifacts including the wrapper types of
86d4f46e622a 8065870: Update JAX-WS RI integration to latest version (2.2.11-b141124.1933)
mkos
parents:
diff changeset
    62
 * document-literal stype operation and exceptions.
86d4f46e622a 8065870: Update JAX-WS RI integration to latest version (2.2.11-b141124.1933)
mkos
parents:
diff changeset
    63
 *
86d4f46e622a 8065870: Update JAX-WS RI integration to latest version (2.2.11-b141124.1933)
mkos
parents:
diff changeset
    64
 * @author shih-chang.chen@oracle.com
86d4f46e622a 8065870: Update JAX-WS RI integration to latest version (2.2.11-b141124.1933)
mkos
parents:
diff changeset
    65
 */
86d4f46e622a 8065870: Update JAX-WS RI integration to latest version (2.2.11-b141124.1933)
mkos
parents:
diff changeset
    66
public class ServiceArtifactSchemaGenerator {
86d4f46e622a 8065870: Update JAX-WS RI integration to latest version (2.2.11-b141124.1933)
mkos
parents:
diff changeset
    67
86d4f46e622a 8065870: Update JAX-WS RI integration to latest version (2.2.11-b141124.1933)
mkos
parents:
diff changeset
    68
    protected AbstractSEIModelImpl model;
86d4f46e622a 8065870: Update JAX-WS RI integration to latest version (2.2.11-b141124.1933)
mkos
parents:
diff changeset
    69
    protected SchemaOutputResolver xsdResolver;
86d4f46e622a 8065870: Update JAX-WS RI integration to latest version (2.2.11-b141124.1933)
mkos
parents:
diff changeset
    70
86d4f46e622a 8065870: Update JAX-WS RI integration to latest version (2.2.11-b141124.1933)
mkos
parents:
diff changeset
    71
    public ServiceArtifactSchemaGenerator(SEIModel model) {
86d4f46e622a 8065870: Update JAX-WS RI integration to latest version (2.2.11-b141124.1933)
mkos
parents:
diff changeset
    72
        this.model = (AbstractSEIModelImpl)model;
86d4f46e622a 8065870: Update JAX-WS RI integration to latest version (2.2.11-b141124.1933)
mkos
parents:
diff changeset
    73
    }
86d4f46e622a 8065870: Update JAX-WS RI integration to latest version (2.2.11-b141124.1933)
mkos
parents:
diff changeset
    74
86d4f46e622a 8065870: Update JAX-WS RI integration to latest version (2.2.11-b141124.1933)
mkos
parents:
diff changeset
    75
    static final String FilePrefix = "jaxwsGen";
86d4f46e622a 8065870: Update JAX-WS RI integration to latest version (2.2.11-b141124.1933)
mkos
parents:
diff changeset
    76
    protected int fileIndex = 0;
86d4f46e622a 8065870: Update JAX-WS RI integration to latest version (2.2.11-b141124.1933)
mkos
parents:
diff changeset
    77
    protected Schema create(String tns) {
86d4f46e622a 8065870: Update JAX-WS RI integration to latest version (2.2.11-b141124.1933)
mkos
parents:
diff changeset
    78
        try {
86d4f46e622a 8065870: Update JAX-WS RI integration to latest version (2.2.11-b141124.1933)
mkos
parents:
diff changeset
    79
            Result res = xsdResolver.createOutput(tns, FilePrefix + (fileIndex++) + ".xsd");
86d4f46e622a 8065870: Update JAX-WS RI integration to latest version (2.2.11-b141124.1933)
mkos
parents:
diff changeset
    80
            return TXW.create(Schema.class, ResultFactory.createSerializer(res));
86d4f46e622a 8065870: Update JAX-WS RI integration to latest version (2.2.11-b141124.1933)
mkos
parents:
diff changeset
    81
        } catch (IOException e) {
86d4f46e622a 8065870: Update JAX-WS RI integration to latest version (2.2.11-b141124.1933)
mkos
parents:
diff changeset
    82
            // TODO Auto-generated catch block
86d4f46e622a 8065870: Update JAX-WS RI integration to latest version (2.2.11-b141124.1933)
mkos
parents:
diff changeset
    83
            throw new WebServiceException(e);
86d4f46e622a 8065870: Update JAX-WS RI integration to latest version (2.2.11-b141124.1933)
mkos
parents:
diff changeset
    84
        }
86d4f46e622a 8065870: Update JAX-WS RI integration to latest version (2.2.11-b141124.1933)
mkos
parents:
diff changeset
    85
    }
86d4f46e622a 8065870: Update JAX-WS RI integration to latest version (2.2.11-b141124.1933)
mkos
parents:
diff changeset
    86
86d4f46e622a 8065870: Update JAX-WS RI integration to latest version (2.2.11-b141124.1933)
mkos
parents:
diff changeset
    87
    public void generate(SchemaOutputResolver resolver) {
86d4f46e622a 8065870: Update JAX-WS RI integration to latest version (2.2.11-b141124.1933)
mkos
parents:
diff changeset
    88
        xsdResolver = resolver;
86d4f46e622a 8065870: Update JAX-WS RI integration to latest version (2.2.11-b141124.1933)
mkos
parents:
diff changeset
    89
        List<WrapperParameter> wrappers = new ArrayList<WrapperParameter>();
86d4f46e622a 8065870: Update JAX-WS RI integration to latest version (2.2.11-b141124.1933)
mkos
parents:
diff changeset
    90
        for (JavaMethodImpl method : model.getJavaMethods()) {
86d4f46e622a 8065870: Update JAX-WS RI integration to latest version (2.2.11-b141124.1933)
mkos
parents:
diff changeset
    91
            if(method.getBinding().isRpcLit()) continue;
86d4f46e622a 8065870: Update JAX-WS RI integration to latest version (2.2.11-b141124.1933)
mkos
parents:
diff changeset
    92
            for (ParameterImpl p : method.getRequestParameters()) {
86d4f46e622a 8065870: Update JAX-WS RI integration to latest version (2.2.11-b141124.1933)
mkos
parents:
diff changeset
    93
                if (p instanceof WrapperParameter) {
86d4f46e622a 8065870: Update JAX-WS RI integration to latest version (2.2.11-b141124.1933)
mkos
parents:
diff changeset
    94
                    if (WrapperComposite.class.equals((((WrapperParameter)p).getTypeInfo().type))) {
86d4f46e622a 8065870: Update JAX-WS RI integration to latest version (2.2.11-b141124.1933)
mkos
parents:
diff changeset
    95
                        wrappers.add((WrapperParameter)p);
86d4f46e622a 8065870: Update JAX-WS RI integration to latest version (2.2.11-b141124.1933)
mkos
parents:
diff changeset
    96
                    }
86d4f46e622a 8065870: Update JAX-WS RI integration to latest version (2.2.11-b141124.1933)
mkos
parents:
diff changeset
    97
                }
86d4f46e622a 8065870: Update JAX-WS RI integration to latest version (2.2.11-b141124.1933)
mkos
parents:
diff changeset
    98
            }
86d4f46e622a 8065870: Update JAX-WS RI integration to latest version (2.2.11-b141124.1933)
mkos
parents:
diff changeset
    99
            for (ParameterImpl p : method.getResponseParameters()) {
86d4f46e622a 8065870: Update JAX-WS RI integration to latest version (2.2.11-b141124.1933)
mkos
parents:
diff changeset
   100
                if (p instanceof WrapperParameter) {
86d4f46e622a 8065870: Update JAX-WS RI integration to latest version (2.2.11-b141124.1933)
mkos
parents:
diff changeset
   101
                    if (WrapperComposite.class.equals((((WrapperParameter)p).getTypeInfo().type))) {
86d4f46e622a 8065870: Update JAX-WS RI integration to latest version (2.2.11-b141124.1933)
mkos
parents:
diff changeset
   102
                        wrappers.add((WrapperParameter)p);
86d4f46e622a 8065870: Update JAX-WS RI integration to latest version (2.2.11-b141124.1933)
mkos
parents:
diff changeset
   103
                    }
86d4f46e622a 8065870: Update JAX-WS RI integration to latest version (2.2.11-b141124.1933)
mkos
parents:
diff changeset
   104
                }
86d4f46e622a 8065870: Update JAX-WS RI integration to latest version (2.2.11-b141124.1933)
mkos
parents:
diff changeset
   105
            }
86d4f46e622a 8065870: Update JAX-WS RI integration to latest version (2.2.11-b141124.1933)
mkos
parents:
diff changeset
   106
        }
86d4f46e622a 8065870: Update JAX-WS RI integration to latest version (2.2.11-b141124.1933)
mkos
parents:
diff changeset
   107
        if (wrappers.isEmpty()) return;
86d4f46e622a 8065870: Update JAX-WS RI integration to latest version (2.2.11-b141124.1933)
mkos
parents:
diff changeset
   108
        HashMap<String, Schema> xsds = initWrappersSchemaWithImports(wrappers);
86d4f46e622a 8065870: Update JAX-WS RI integration to latest version (2.2.11-b141124.1933)
mkos
parents:
diff changeset
   109
        postInit(xsds);
86d4f46e622a 8065870: Update JAX-WS RI integration to latest version (2.2.11-b141124.1933)
mkos
parents:
diff changeset
   110
        for(WrapperParameter wp : wrappers) {
86d4f46e622a 8065870: Update JAX-WS RI integration to latest version (2.2.11-b141124.1933)
mkos
parents:
diff changeset
   111
            String tns = wp.getName().getNamespaceURI();
86d4f46e622a 8065870: Update JAX-WS RI integration to latest version (2.2.11-b141124.1933)
mkos
parents:
diff changeset
   112
            Schema xsd = xsds.get(tns);
86d4f46e622a 8065870: Update JAX-WS RI integration to latest version (2.2.11-b141124.1933)
mkos
parents:
diff changeset
   113
            Element e =  xsd._element(Element.class);
86d4f46e622a 8065870: Update JAX-WS RI integration to latest version (2.2.11-b141124.1933)
mkos
parents:
diff changeset
   114
            e._attribute("name", wp.getName().getLocalPart());
86d4f46e622a 8065870: Update JAX-WS RI integration to latest version (2.2.11-b141124.1933)
mkos
parents:
diff changeset
   115
            e.type(wp.getName());
86d4f46e622a 8065870: Update JAX-WS RI integration to latest version (2.2.11-b141124.1933)
mkos
parents:
diff changeset
   116
            ComplexType ct =  xsd._element(ComplexType.class);
86d4f46e622a 8065870: Update JAX-WS RI integration to latest version (2.2.11-b141124.1933)
mkos
parents:
diff changeset
   117
            ct._attribute("name", wp.getName().getLocalPart());
86d4f46e622a 8065870: Update JAX-WS RI integration to latest version (2.2.11-b141124.1933)
mkos
parents:
diff changeset
   118
            ExplicitGroup sq = ct.sequence();
86d4f46e622a 8065870: Update JAX-WS RI integration to latest version (2.2.11-b141124.1933)
mkos
parents:
diff changeset
   119
            for (ParameterImpl p : wp.getWrapperChildren() ) if (p.getBinding().isBody()) addChild(sq, p);
86d4f46e622a 8065870: Update JAX-WS RI integration to latest version (2.2.11-b141124.1933)
mkos
parents:
diff changeset
   120
        }
86d4f46e622a 8065870: Update JAX-WS RI integration to latest version (2.2.11-b141124.1933)
mkos
parents:
diff changeset
   121
        for(Schema xsd: xsds.values()) xsd.commit();
86d4f46e622a 8065870: Update JAX-WS RI integration to latest version (2.2.11-b141124.1933)
mkos
parents:
diff changeset
   122
    }
86d4f46e622a 8065870: Update JAX-WS RI integration to latest version (2.2.11-b141124.1933)
mkos
parents:
diff changeset
   123
86d4f46e622a 8065870: Update JAX-WS RI integration to latest version (2.2.11-b141124.1933)
mkos
parents:
diff changeset
   124
    protected void postInit(HashMap<String, Schema> xsds) {
86d4f46e622a 8065870: Update JAX-WS RI integration to latest version (2.2.11-b141124.1933)
mkos
parents:
diff changeset
   125
    }
86d4f46e622a 8065870: Update JAX-WS RI integration to latest version (2.2.11-b141124.1933)
mkos
parents:
diff changeset
   126
86d4f46e622a 8065870: Update JAX-WS RI integration to latest version (2.2.11-b141124.1933)
mkos
parents:
diff changeset
   127
    protected void addChild(ExplicitGroup sq, ParameterImpl param) {
86d4f46e622a 8065870: Update JAX-WS RI integration to latest version (2.2.11-b141124.1933)
mkos
parents:
diff changeset
   128
        TypeInfo typeInfo = param.getItemType();
86d4f46e622a 8065870: Update JAX-WS RI integration to latest version (2.2.11-b141124.1933)
mkos
parents:
diff changeset
   129
        boolean repeatedElement = false;
86d4f46e622a 8065870: Update JAX-WS RI integration to latest version (2.2.11-b141124.1933)
mkos
parents:
diff changeset
   130
        if (typeInfo == null) {
86d4f46e622a 8065870: Update JAX-WS RI integration to latest version (2.2.11-b141124.1933)
mkos
parents:
diff changeset
   131
            typeInfo = param.getTypeInfo();
86d4f46e622a 8065870: Update JAX-WS RI integration to latest version (2.2.11-b141124.1933)
mkos
parents:
diff changeset
   132
        } else {
86d4f46e622a 8065870: Update JAX-WS RI integration to latest version (2.2.11-b141124.1933)
mkos
parents:
diff changeset
   133
            if (typeInfo.getWrapperType() != null) typeInfo = param.getTypeInfo();
86d4f46e622a 8065870: Update JAX-WS RI integration to latest version (2.2.11-b141124.1933)
mkos
parents:
diff changeset
   134
            else repeatedElement = true;
86d4f46e622a 8065870: Update JAX-WS RI integration to latest version (2.2.11-b141124.1933)
mkos
parents:
diff changeset
   135
        }
86d4f46e622a 8065870: Update JAX-WS RI integration to latest version (2.2.11-b141124.1933)
mkos
parents:
diff changeset
   136
        Occurs child = addChild(sq, param.getName(), typeInfo);
86d4f46e622a 8065870: Update JAX-WS RI integration to latest version (2.2.11-b141124.1933)
mkos
parents:
diff changeset
   137
        if (repeatedElement && child != null) {
86d4f46e622a 8065870: Update JAX-WS RI integration to latest version (2.2.11-b141124.1933)
mkos
parents:
diff changeset
   138
            child.maxOccurs("unbounded");
86d4f46e622a 8065870: Update JAX-WS RI integration to latest version (2.2.11-b141124.1933)
mkos
parents:
diff changeset
   139
        }
86d4f46e622a 8065870: Update JAX-WS RI integration to latest version (2.2.11-b141124.1933)
mkos
parents:
diff changeset
   140
    }
86d4f46e622a 8065870: Update JAX-WS RI integration to latest version (2.2.11-b141124.1933)
mkos
parents:
diff changeset
   141
86d4f46e622a 8065870: Update JAX-WS RI integration to latest version (2.2.11-b141124.1933)
mkos
parents:
diff changeset
   142
    protected Occurs addChild(ExplicitGroup sq, QName name, TypeInfo typeInfo) {
86d4f46e622a 8065870: Update JAX-WS RI integration to latest version (2.2.11-b141124.1933)
mkos
parents:
diff changeset
   143
        LocalElement le = null;;
86d4f46e622a 8065870: Update JAX-WS RI integration to latest version (2.2.11-b141124.1933)
mkos
parents:
diff changeset
   144
        QName type = model.getBindingContext().getTypeName(typeInfo);
86d4f46e622a 8065870: Update JAX-WS RI integration to latest version (2.2.11-b141124.1933)
mkos
parents:
diff changeset
   145
        if (type != null) {
86d4f46e622a 8065870: Update JAX-WS RI integration to latest version (2.2.11-b141124.1933)
mkos
parents:
diff changeset
   146
            le = sq.element();
86d4f46e622a 8065870: Update JAX-WS RI integration to latest version (2.2.11-b141124.1933)
mkos
parents:
diff changeset
   147
            le._attribute("name", name.getLocalPart());
86d4f46e622a 8065870: Update JAX-WS RI integration to latest version (2.2.11-b141124.1933)
mkos
parents:
diff changeset
   148
            le.type(type);
86d4f46e622a 8065870: Update JAX-WS RI integration to latest version (2.2.11-b141124.1933)
mkos
parents:
diff changeset
   149
        } else {
86d4f46e622a 8065870: Update JAX-WS RI integration to latest version (2.2.11-b141124.1933)
mkos
parents:
diff changeset
   150
            if (typeInfo.type instanceof Class) {
86d4f46e622a 8065870: Update JAX-WS RI integration to latest version (2.2.11-b141124.1933)
mkos
parents:
diff changeset
   151
                try {
86d4f46e622a 8065870: Update JAX-WS RI integration to latest version (2.2.11-b141124.1933)
mkos
parents:
diff changeset
   152
                    QName elemName = model.getBindingContext().getElementName((Class)typeInfo.type);
86d4f46e622a 8065870: Update JAX-WS RI integration to latest version (2.2.11-b141124.1933)
mkos
parents:
diff changeset
   153
                    if (elemName.getLocalPart().equals("any") && elemName.getNamespaceURI().equals(XsdNs)) {
86d4f46e622a 8065870: Update JAX-WS RI integration to latest version (2.2.11-b141124.1933)
mkos
parents:
diff changeset
   154
                        return sq.any();
86d4f46e622a 8065870: Update JAX-WS RI integration to latest version (2.2.11-b141124.1933)
mkos
parents:
diff changeset
   155
                    } else {
86d4f46e622a 8065870: Update JAX-WS RI integration to latest version (2.2.11-b141124.1933)
mkos
parents:
diff changeset
   156
                        le = sq.element();
86d4f46e622a 8065870: Update JAX-WS RI integration to latest version (2.2.11-b141124.1933)
mkos
parents:
diff changeset
   157
                        le.ref(elemName);
86d4f46e622a 8065870: Update JAX-WS RI integration to latest version (2.2.11-b141124.1933)
mkos
parents:
diff changeset
   158
                    }
86d4f46e622a 8065870: Update JAX-WS RI integration to latest version (2.2.11-b141124.1933)
mkos
parents:
diff changeset
   159
                } catch (JAXBException je) {
86d4f46e622a 8065870: Update JAX-WS RI integration to latest version (2.2.11-b141124.1933)
mkos
parents:
diff changeset
   160
                    throw new WebServiceException(je.getMessage(), je);
86d4f46e622a 8065870: Update JAX-WS RI integration to latest version (2.2.11-b141124.1933)
mkos
parents:
diff changeset
   161
                }
86d4f46e622a 8065870: Update JAX-WS RI integration to latest version (2.2.11-b141124.1933)
mkos
parents:
diff changeset
   162
            }
86d4f46e622a 8065870: Update JAX-WS RI integration to latest version (2.2.11-b141124.1933)
mkos
parents:
diff changeset
   163
        }
86d4f46e622a 8065870: Update JAX-WS RI integration to latest version (2.2.11-b141124.1933)
mkos
parents:
diff changeset
   164
        return le;
86d4f46e622a 8065870: Update JAX-WS RI integration to latest version (2.2.11-b141124.1933)
mkos
parents:
diff changeset
   165
    }
86d4f46e622a 8065870: Update JAX-WS RI integration to latest version (2.2.11-b141124.1933)
mkos
parents:
diff changeset
   166
86d4f46e622a 8065870: Update JAX-WS RI integration to latest version (2.2.11-b141124.1933)
mkos
parents:
diff changeset
   167
    //All the imports have to go first ...
86d4f46e622a 8065870: Update JAX-WS RI integration to latest version (2.2.11-b141124.1933)
mkos
parents:
diff changeset
   168
    private HashMap<String, Schema> initWrappersSchemaWithImports(List<WrapperParameter> wrappers) {
86d4f46e622a 8065870: Update JAX-WS RI integration to latest version (2.2.11-b141124.1933)
mkos
parents:
diff changeset
   169
        Object o = model.databindingInfo().properties().get(DocWrappeeNamespapceQualified);
86d4f46e622a 8065870: Update JAX-WS RI integration to latest version (2.2.11-b141124.1933)
mkos
parents:
diff changeset
   170
        boolean wrappeeQualified = (o!= null && o instanceof Boolean) ? ((Boolean) o) : false;
86d4f46e622a 8065870: Update JAX-WS RI integration to latest version (2.2.11-b141124.1933)
mkos
parents:
diff changeset
   171
        HashMap<String, Schema> xsds = new HashMap<String, Schema>();
86d4f46e622a 8065870: Update JAX-WS RI integration to latest version (2.2.11-b141124.1933)
mkos
parents:
diff changeset
   172
        HashMap<String, Set<String>> imports = new HashMap<String, Set<String>>();
86d4f46e622a 8065870: Update JAX-WS RI integration to latest version (2.2.11-b141124.1933)
mkos
parents:
diff changeset
   173
        for(WrapperParameter wp : wrappers) {
86d4f46e622a 8065870: Update JAX-WS RI integration to latest version (2.2.11-b141124.1933)
mkos
parents:
diff changeset
   174
            String tns = wp.getName().getNamespaceURI();
86d4f46e622a 8065870: Update JAX-WS RI integration to latest version (2.2.11-b141124.1933)
mkos
parents:
diff changeset
   175
            Schema xsd = xsds.get(tns);
86d4f46e622a 8065870: Update JAX-WS RI integration to latest version (2.2.11-b141124.1933)
mkos
parents:
diff changeset
   176
            if (xsd == null) {
86d4f46e622a 8065870: Update JAX-WS RI integration to latest version (2.2.11-b141124.1933)
mkos
parents:
diff changeset
   177
                xsd = create(tns);
86d4f46e622a 8065870: Update JAX-WS RI integration to latest version (2.2.11-b141124.1933)
mkos
parents:
diff changeset
   178
                xsd.targetNamespace(tns);
86d4f46e622a 8065870: Update JAX-WS RI integration to latest version (2.2.11-b141124.1933)
mkos
parents:
diff changeset
   179
                if (wrappeeQualified) xsd._attribute("elementFormDefault", "qualified");
86d4f46e622a 8065870: Update JAX-WS RI integration to latest version (2.2.11-b141124.1933)
mkos
parents:
diff changeset
   180
                xsds.put(tns, xsd);
86d4f46e622a 8065870: Update JAX-WS RI integration to latest version (2.2.11-b141124.1933)
mkos
parents:
diff changeset
   181
            }
86d4f46e622a 8065870: Update JAX-WS RI integration to latest version (2.2.11-b141124.1933)
mkos
parents:
diff changeset
   182
            for (ParameterImpl p : wp.getWrapperChildren() ) {
86d4f46e622a 8065870: Update JAX-WS RI integration to latest version (2.2.11-b141124.1933)
mkos
parents:
diff changeset
   183
                String nsToImport = (p.getBinding().isBody())? bodyParamNS(p): null;
86d4f46e622a 8065870: Update JAX-WS RI integration to latest version (2.2.11-b141124.1933)
mkos
parents:
diff changeset
   184
                if (nsToImport != null && !nsToImport.equals(tns) && !nsToImport.equals("http://www.w3.org/2001/XMLSchema")) {
86d4f46e622a 8065870: Update JAX-WS RI integration to latest version (2.2.11-b141124.1933)
mkos
parents:
diff changeset
   185
                    Set<String> importSet = imports.get(tns);
86d4f46e622a 8065870: Update JAX-WS RI integration to latest version (2.2.11-b141124.1933)
mkos
parents:
diff changeset
   186
                    if (importSet == null) {
86d4f46e622a 8065870: Update JAX-WS RI integration to latest version (2.2.11-b141124.1933)
mkos
parents:
diff changeset
   187
                        importSet = new HashSet<String>();
86d4f46e622a 8065870: Update JAX-WS RI integration to latest version (2.2.11-b141124.1933)
mkos
parents:
diff changeset
   188
                        imports.put(tns, importSet);
86d4f46e622a 8065870: Update JAX-WS RI integration to latest version (2.2.11-b141124.1933)
mkos
parents:
diff changeset
   189
                    }
86d4f46e622a 8065870: Update JAX-WS RI integration to latest version (2.2.11-b141124.1933)
mkos
parents:
diff changeset
   190
                    importSet.add(nsToImport);
86d4f46e622a 8065870: Update JAX-WS RI integration to latest version (2.2.11-b141124.1933)
mkos
parents:
diff changeset
   191
                }
86d4f46e622a 8065870: Update JAX-WS RI integration to latest version (2.2.11-b141124.1933)
mkos
parents:
diff changeset
   192
            }
86d4f46e622a 8065870: Update JAX-WS RI integration to latest version (2.2.11-b141124.1933)
mkos
parents:
diff changeset
   193
        }
86d4f46e622a 8065870: Update JAX-WS RI integration to latest version (2.2.11-b141124.1933)
mkos
parents:
diff changeset
   194
        for(Entry<String, Set<String>> entry: imports.entrySet()) {
86d4f46e622a 8065870: Update JAX-WS RI integration to latest version (2.2.11-b141124.1933)
mkos
parents:
diff changeset
   195
            String tns = entry.getKey();
86d4f46e622a 8065870: Update JAX-WS RI integration to latest version (2.2.11-b141124.1933)
mkos
parents:
diff changeset
   196
            Set<String> importSet = entry.getValue();
86d4f46e622a 8065870: Update JAX-WS RI integration to latest version (2.2.11-b141124.1933)
mkos
parents:
diff changeset
   197
            Schema xsd = xsds.get(tns);
86d4f46e622a 8065870: Update JAX-WS RI integration to latest version (2.2.11-b141124.1933)
mkos
parents:
diff changeset
   198
            for(String nsToImport : importSet) xsd._namespace(nsToImport, true);
86d4f46e622a 8065870: Update JAX-WS RI integration to latest version (2.2.11-b141124.1933)
mkos
parents:
diff changeset
   199
            for(String nsToImport : importSet) {
86d4f46e622a 8065870: Update JAX-WS RI integration to latest version (2.2.11-b141124.1933)
mkos
parents:
diff changeset
   200
                com.sun.xml.internal.ws.wsdl.writer.document.xsd.Import imp = xsd._import();
86d4f46e622a 8065870: Update JAX-WS RI integration to latest version (2.2.11-b141124.1933)
mkos
parents:
diff changeset
   201
                imp.namespace(nsToImport);
86d4f46e622a 8065870: Update JAX-WS RI integration to latest version (2.2.11-b141124.1933)
mkos
parents:
diff changeset
   202
            }
86d4f46e622a 8065870: Update JAX-WS RI integration to latest version (2.2.11-b141124.1933)
mkos
parents:
diff changeset
   203
        }
86d4f46e622a 8065870: Update JAX-WS RI integration to latest version (2.2.11-b141124.1933)
mkos
parents:
diff changeset
   204
        return xsds;
86d4f46e622a 8065870: Update JAX-WS RI integration to latest version (2.2.11-b141124.1933)
mkos
parents:
diff changeset
   205
    }
86d4f46e622a 8065870: Update JAX-WS RI integration to latest version (2.2.11-b141124.1933)
mkos
parents:
diff changeset
   206
86d4f46e622a 8065870: Update JAX-WS RI integration to latest version (2.2.11-b141124.1933)
mkos
parents:
diff changeset
   207
    protected String bodyParamNS(ParameterImpl p) {
86d4f46e622a 8065870: Update JAX-WS RI integration to latest version (2.2.11-b141124.1933)
mkos
parents:
diff changeset
   208
        String nsToImport = null;
86d4f46e622a 8065870: Update JAX-WS RI integration to latest version (2.2.11-b141124.1933)
mkos
parents:
diff changeset
   209
        TypeInfo typeInfo = p.getItemType();
86d4f46e622a 8065870: Update JAX-WS RI integration to latest version (2.2.11-b141124.1933)
mkos
parents:
diff changeset
   210
        if (typeInfo == null) typeInfo = p.getTypeInfo();
86d4f46e622a 8065870: Update JAX-WS RI integration to latest version (2.2.11-b141124.1933)
mkos
parents:
diff changeset
   211
        QName type = model.getBindingContext().getTypeName(typeInfo);
86d4f46e622a 8065870: Update JAX-WS RI integration to latest version (2.2.11-b141124.1933)
mkos
parents:
diff changeset
   212
        if (type != null) {
86d4f46e622a 8065870: Update JAX-WS RI integration to latest version (2.2.11-b141124.1933)
mkos
parents:
diff changeset
   213
            nsToImport = type.getNamespaceURI();
86d4f46e622a 8065870: Update JAX-WS RI integration to latest version (2.2.11-b141124.1933)
mkos
parents:
diff changeset
   214
        } else {
86d4f46e622a 8065870: Update JAX-WS RI integration to latest version (2.2.11-b141124.1933)
mkos
parents:
diff changeset
   215
            if (typeInfo.type instanceof Class) {
86d4f46e622a 8065870: Update JAX-WS RI integration to latest version (2.2.11-b141124.1933)
mkos
parents:
diff changeset
   216
                try {
86d4f46e622a 8065870: Update JAX-WS RI integration to latest version (2.2.11-b141124.1933)
mkos
parents:
diff changeset
   217
                    QName elemRef = model.getBindingContext().getElementName((Class)typeInfo.type);
86d4f46e622a 8065870: Update JAX-WS RI integration to latest version (2.2.11-b141124.1933)
mkos
parents:
diff changeset
   218
                    if (elemRef != null) nsToImport = elemRef.getNamespaceURI();
86d4f46e622a 8065870: Update JAX-WS RI integration to latest version (2.2.11-b141124.1933)
mkos
parents:
diff changeset
   219
                } catch (JAXBException je) {
86d4f46e622a 8065870: Update JAX-WS RI integration to latest version (2.2.11-b141124.1933)
mkos
parents:
diff changeset
   220
                    throw new WebServiceException(je.getMessage(), je);
86d4f46e622a 8065870: Update JAX-WS RI integration to latest version (2.2.11-b141124.1933)
mkos
parents:
diff changeset
   221
                }
86d4f46e622a 8065870: Update JAX-WS RI integration to latest version (2.2.11-b141124.1933)
mkos
parents:
diff changeset
   222
            }
86d4f46e622a 8065870: Update JAX-WS RI integration to latest version (2.2.11-b141124.1933)
mkos
parents:
diff changeset
   223
        }
86d4f46e622a 8065870: Update JAX-WS RI integration to latest version (2.2.11-b141124.1933)
mkos
parents:
diff changeset
   224
        return nsToImport;
86d4f46e622a 8065870: Update JAX-WS RI integration to latest version (2.2.11-b141124.1933)
mkos
parents:
diff changeset
   225
    }
86d4f46e622a 8065870: Update JAX-WS RI integration to latest version (2.2.11-b141124.1933)
mkos
parents:
diff changeset
   226
}