src/share/jaxws_classes/com/sun/xml/internal/ws/wsdl/parser/RuntimeWSDLParser.java

changeset 408
b0610cd08440
parent 368
0989ad8c0860
child 637
9c07ef4934dd
equal deleted inserted replaced
405:cc682329886b 408:b0610cd08440
40 import com.sun.xml.internal.ws.api.policy.PolicyResolverFactory; 40 import com.sun.xml.internal.ws.api.policy.PolicyResolverFactory;
41 import com.sun.xml.internal.ws.api.addressing.AddressingVersion; 41 import com.sun.xml.internal.ws.api.addressing.AddressingVersion;
42 import com.sun.xml.internal.ws.api.addressing.WSEndpointReference; 42 import com.sun.xml.internal.ws.api.addressing.WSEndpointReference;
43 import com.sun.xml.internal.ws.api.model.ParameterBinding; 43 import com.sun.xml.internal.ws.api.model.ParameterBinding;
44 import com.sun.xml.internal.ws.api.model.wsdl.WSDLDescriptorKind; 44 import com.sun.xml.internal.ws.api.model.wsdl.WSDLDescriptorKind;
45 import com.sun.xml.internal.ws.api.model.wsdl.WSDLModel;
46 import com.sun.xml.internal.ws.api.model.wsdl.editable.EditableWSDLBoundFault;
47 import com.sun.xml.internal.ws.api.model.wsdl.editable.EditableWSDLBoundOperation;
48 import com.sun.xml.internal.ws.api.model.wsdl.editable.EditableWSDLBoundPortType;
49 import com.sun.xml.internal.ws.api.model.wsdl.editable.EditableWSDLFault;
50 import com.sun.xml.internal.ws.api.model.wsdl.editable.EditableWSDLInput;
51 import com.sun.xml.internal.ws.api.model.wsdl.editable.EditableWSDLMessage;
52 import com.sun.xml.internal.ws.api.model.wsdl.editable.EditableWSDLModel;
53 import com.sun.xml.internal.ws.api.model.wsdl.editable.EditableWSDLOperation;
54 import com.sun.xml.internal.ws.api.model.wsdl.editable.EditableWSDLOutput;
55 import com.sun.xml.internal.ws.api.model.wsdl.editable.EditableWSDLPart;
56 import com.sun.xml.internal.ws.api.model.wsdl.editable.EditableWSDLPort;
57 import com.sun.xml.internal.ws.api.model.wsdl.editable.EditableWSDLPortType;
58 import com.sun.xml.internal.ws.api.model.wsdl.editable.EditableWSDLService;
45 import com.sun.xml.internal.ws.api.server.Container; 59 import com.sun.xml.internal.ws.api.server.Container;
46 import com.sun.xml.internal.ws.api.server.ContainerResolver; 60 import com.sun.xml.internal.ws.api.server.ContainerResolver;
47 import com.sun.xml.internal.ws.api.streaming.XMLStreamReaderFactory; 61 import com.sun.xml.internal.ws.api.streaming.XMLStreamReaderFactory;
48 import com.sun.xml.internal.ws.api.wsdl.parser.MetaDataResolver; 62 import com.sun.xml.internal.ws.api.wsdl.parser.MetaDataResolver;
49 import com.sun.xml.internal.ws.api.wsdl.parser.MetadataResolverFactory; 63 import com.sun.xml.internal.ws.api.wsdl.parser.MetadataResolverFactory;
58 import com.sun.xml.internal.ws.streaming.TidyXMLStreamReader; 72 import com.sun.xml.internal.ws.streaming.TidyXMLStreamReader;
59 import com.sun.xml.internal.ws.streaming.XMLStreamReaderUtil; 73 import com.sun.xml.internal.ws.streaming.XMLStreamReaderUtil;
60 import com.sun.xml.internal.ws.util.ServiceFinder; 74 import com.sun.xml.internal.ws.util.ServiceFinder;
61 import com.sun.xml.internal.ws.util.xml.XmlUtil; 75 import com.sun.xml.internal.ws.util.xml.XmlUtil;
62 import com.sun.xml.internal.ws.policy.jaxws.PolicyWSDLParserExtension; 76 import com.sun.xml.internal.ws.policy.jaxws.PolicyWSDLParserExtension;
77
63 import org.xml.sax.EntityResolver; 78 import org.xml.sax.EntityResolver;
64 import org.xml.sax.SAXException; 79 import org.xml.sax.SAXException;
65 80
66 import javax.jws.soap.SOAPBinding.Style; 81 import javax.jws.soap.SOAPBinding.Style;
67 import javax.xml.namespace.QName; 82 import javax.xml.namespace.QName;
68 import javax.xml.stream.*; 83 import javax.xml.stream.*;
69 import javax.xml.transform.Source; 84 import javax.xml.transform.Source;
70 import javax.xml.transform.stream.StreamSource; 85 import javax.xml.transform.stream.StreamSource;
71 import javax.xml.ws.Service; 86 import javax.xml.ws.Service;
72 import javax.xml.ws.WebServiceException; 87 import javax.xml.ws.WebServiceException;
88
73 import java.io.IOException; 89 import java.io.IOException;
74 import java.io.InputStream; 90 import java.io.InputStream;
75 import java.io.FilterInputStream; 91 import java.io.FilterInputStream;
76 import java.net.URISyntaxException; 92 import java.net.URISyntaxException;
77 import java.net.URL; 93 import java.net.URL;
84 * @author Vivek Pandey 100 * @author Vivek Pandey
85 * @author Rama Pulavarthi 101 * @author Rama Pulavarthi
86 */ 102 */
87 public class RuntimeWSDLParser { 103 public class RuntimeWSDLParser {
88 104
89 private final WSDLModelImpl wsdlDoc; 105 private final EditableWSDLModel wsdlDoc;
90 /** 106 /**
91 * Target namespace URI of the WSDL that we are currently parsing. 107 * Target namespace URI of the WSDL that we are currently parsing.
92 */ 108 */
93 private String targetNamespace; 109 private String targetNamespace;
94 /** 110 /**
124 * 140 *
125 * @param wsdlLoc 141 * @param wsdlLoc
126 * Either this or <tt>wsdl</tt> parameter must be given. 142 * Either this or <tt>wsdl</tt> parameter must be given.
127 * Null location means the system won't be able to resolve relative references in the WSDL, 143 * Null location means the system won't be able to resolve relative references in the WSDL,
128 */ 144 */
129 public static WSDLModelImpl parse(@Nullable URL wsdlLoc, @NotNull Source wsdlSource, @NotNull EntityResolver resolver, 145 public static WSDLModel parse(@Nullable URL wsdlLoc, @NotNull Source wsdlSource, @NotNull EntityResolver resolver,
130 boolean isClientSide, Container container, 146 boolean isClientSide, Container container,
131 WSDLParserExtension... extensions) throws IOException, XMLStreamException, SAXException { 147 WSDLParserExtension... extensions) throws IOException, XMLStreamException, SAXException {
132 return parse(wsdlLoc, wsdlSource, resolver, isClientSide, container, Service.class, PolicyResolverFactory.create(),extensions); 148 return parse(wsdlLoc, wsdlSource, resolver, isClientSide, container, Service.class, PolicyResolverFactory.create(),extensions);
133 } 149 }
134 150
139 * 155 *
140 * @param wsdlLoc 156 * @param wsdlLoc
141 * Either this or <tt>wsdl</tt> parameter must be given. 157 * Either this or <tt>wsdl</tt> parameter must be given.
142 * Null location means the system won't be able to resolve relative references in the WSDL, 158 * Null location means the system won't be able to resolve relative references in the WSDL,
143 */ 159 */
144 public static WSDLModelImpl parse(@Nullable URL wsdlLoc, @NotNull Source wsdlSource, @NotNull EntityResolver resolver, 160 public static WSDLModel parse(@Nullable URL wsdlLoc, @NotNull Source wsdlSource, @NotNull EntityResolver resolver,
145 boolean isClientSide, Container container, Class serviceClass, 161 boolean isClientSide, Container container, Class serviceClass,
146 WSDLParserExtension... extensions) throws IOException, XMLStreamException, SAXException { 162 WSDLParserExtension... extensions) throws IOException, XMLStreamException, SAXException {
147 return parse(wsdlLoc, wsdlSource, resolver, isClientSide, container, serviceClass, PolicyResolverFactory.create(),extensions); 163 return parse(wsdlLoc, wsdlSource, resolver, isClientSide, container, serviceClass, PolicyResolverFactory.create(),extensions);
148 } 164 }
149 165
154 * 170 *
155 * @param wsdlLoc 171 * @param wsdlLoc
156 * Either this or <tt>wsdl</tt> parameter must be given. 172 * Either this or <tt>wsdl</tt> parameter must be given.
157 * Null location means the system won't be able to resolve relative references in the WSDL, 173 * Null location means the system won't be able to resolve relative references in the WSDL,
158 */ 174 */
159 public static WSDLModelImpl parse(@Nullable URL wsdlLoc, @NotNull Source wsdlSource, @NotNull EntityResolver resolver, 175 public static WSDLModel parse(@Nullable URL wsdlLoc, @NotNull Source wsdlSource, @NotNull EntityResolver resolver,
160 boolean isClientSide, Container container, @NotNull PolicyResolver policyResolver, 176 boolean isClientSide, Container container, @NotNull PolicyResolver policyResolver,
161 WSDLParserExtension... extensions) throws IOException, XMLStreamException, SAXException { 177 WSDLParserExtension... extensions) throws IOException, XMLStreamException, SAXException {
162 return parse(wsdlLoc, wsdlSource, resolver, isClientSide, container, Service.class, policyResolver, extensions); 178 return parse(wsdlLoc, wsdlSource, resolver, isClientSide, container, Service.class, policyResolver, extensions);
163 } 179 }
164 180
169 * 185 *
170 * @param wsdlLoc 186 * @param wsdlLoc
171 * Either this or <tt>wsdl</tt> parameter must be given. 187 * Either this or <tt>wsdl</tt> parameter must be given.
172 * Null location means the system won't be able to resolve relative references in the WSDL, 188 * Null location means the system won't be able to resolve relative references in the WSDL,
173 */ 189 */
174 public static WSDLModelImpl parse(@Nullable URL wsdlLoc, @NotNull Source wsdlSource, @NotNull EntityResolver resolver, 190 public static WSDLModel parse(@Nullable URL wsdlLoc, @NotNull Source wsdlSource, @NotNull EntityResolver resolver,
175 boolean isClientSide, Container container, Class serviceClass, 191 boolean isClientSide, Container container, Class serviceClass,
176 @NotNull PolicyResolver policyResolver, 192 @NotNull PolicyResolver policyResolver,
177 WSDLParserExtension... extensions) throws IOException, XMLStreamException, SAXException { 193 WSDLParserExtension... extensions) throws IOException, XMLStreamException, SAXException {
178 return parse(wsdlLoc, wsdlSource, resolver, isClientSide, container, serviceClass, policyResolver, false, extensions); 194 return parse(wsdlLoc, wsdlSource, resolver, isClientSide, container, serviceClass, policyResolver, false, extensions);
179 } 195 }
185 * 201 *
186 * @param wsdlLoc 202 * @param wsdlLoc
187 * Either this or <tt>wsdl</tt> parameter must be given. 203 * Either this or <tt>wsdl</tt> parameter must be given.
188 * Null location means the system won't be able to resolve relative references in the WSDL, 204 * Null location means the system won't be able to resolve relative references in the WSDL,
189 */ 205 */
190 public static WSDLModelImpl parse(@Nullable URL wsdlLoc, @NotNull Source wsdlSource, @NotNull EntityResolver resolver, 206 public static WSDLModel parse(@Nullable URL wsdlLoc, @NotNull Source wsdlSource, @NotNull EntityResolver resolver,
191 boolean isClientSide, Container container, Class serviceClass, 207 boolean isClientSide, Container container, Class serviceClass,
192 @NotNull PolicyResolver policyResolver, 208 @NotNull PolicyResolver policyResolver,
193 boolean isUseStreamFromEntityResolverWrapper, 209 boolean isUseStreamFromEntityResolverWrapper,
194 WSDLParserExtension... extensions) throws IOException, XMLStreamException, SAXException { 210 WSDLParserExtension... extensions) throws IOException, XMLStreamException, SAXException {
195 assert resolver != null; 211 assert resolver != null;
224 throw new WebServiceException(ClientMessages.WSDL_CONTAINS_NO_SERVICE(wsdlLoc)); 240 throw new WebServiceException(ClientMessages.WSDL_CONTAINS_NO_SERVICE(wsdlLoc));
225 241
226 return wsdlParser.wsdlDoc; 242 return wsdlParser.wsdlDoc;
227 } 243 }
228 244
229 private static WSDLModelImpl tryWithMex(@NotNull RuntimeWSDLParser wsdlParser, @NotNull URL wsdlLoc, @NotNull EntityResolver resolver, boolean isClientSide, Container container, Throwable e, Class serviceClass, PolicyResolver policyResolver, WSDLParserExtension... extensions) throws SAXException, XMLStreamException { 245 private static WSDLModel tryWithMex(@NotNull RuntimeWSDLParser wsdlParser, @NotNull URL wsdlLoc, @NotNull EntityResolver resolver, boolean isClientSide, Container container, Throwable e, Class serviceClass, PolicyResolver policyResolver, WSDLParserExtension... extensions) throws SAXException, XMLStreamException {
230 ArrayList<Throwable> exceptions = new ArrayList<Throwable>(); 246 ArrayList<Throwable> exceptions = new ArrayList<Throwable>();
231 try { 247 try {
232 WSDLModelImpl wsdlModel = wsdlParser.parseUsingMex(wsdlLoc, resolver, isClientSide, container, serviceClass, policyResolver,extensions); 248 WSDLModel wsdlModel = wsdlParser.parseUsingMex(wsdlLoc, resolver, isClientSide, container, serviceClass, policyResolver,extensions);
233 if(wsdlModel == null){ 249 if(wsdlModel == null){
234 throw new WebServiceException(ClientMessages.FAILED_TO_PARSE(wsdlLoc.toExternalForm(), e.getMessage()), e); 250 throw new WebServiceException(ClientMessages.FAILED_TO_PARSE(wsdlLoc.toExternalForm(), e.getMessage()), e);
235 } 251 }
236 return wsdlModel; 252 return wsdlModel;
237 } catch (URISyntaxException e1) { 253 } catch (URISyntaxException e1) {
242 exceptions.add(e1); 258 exceptions.add(e1);
243 } 259 }
244 throw new InaccessibleWSDLException(exceptions); 260 throw new InaccessibleWSDLException(exceptions);
245 } 261 }
246 262
247 private WSDLModelImpl parseUsingMex(@NotNull URL wsdlLoc, @NotNull EntityResolver resolver, boolean isClientSide, Container container, Class serviceClass, PolicyResolver policyResolver, WSDLParserExtension[] extensions) throws IOException, SAXException, XMLStreamException, URISyntaxException { 263 private WSDLModel parseUsingMex(@NotNull URL wsdlLoc, @NotNull EntityResolver resolver, boolean isClientSide, Container container, Class serviceClass, PolicyResolver policyResolver, WSDLParserExtension[] extensions) throws IOException, SAXException, XMLStreamException, URISyntaxException {
248 //try MEX 264 //try MEX
249 MetaDataResolver mdResolver = null; 265 MetaDataResolver mdResolver = null;
250 ServiceDescriptor serviceDescriptor = null; 266 ServiceDescriptor serviceDescriptor = null;
251 RuntimeWSDLParser wsdlParser = null; 267 RuntimeWSDLParser wsdlParser = null;
252 268
293 private static boolean hasWSDLDefinitions(XMLStreamReader reader) { 309 private static boolean hasWSDLDefinitions(XMLStreamReader reader) {
294 XMLStreamReaderUtil.nextElementContent(reader); 310 XMLStreamReaderUtil.nextElementContent(reader);
295 return reader.getName().equals(WSDLConstants.QNAME_DEFINITIONS); 311 return reader.getName().equals(WSDLConstants.QNAME_DEFINITIONS);
296 } 312 }
297 313
298 public static WSDLModelImpl parse(XMLEntityResolver.Parser wsdl, XMLEntityResolver resolver, boolean isClientSide, Container container, PolicyResolver policyResolver, WSDLParserExtension... extensions) throws IOException, XMLStreamException, SAXException { 314 public static WSDLModel parse(XMLEntityResolver.Parser wsdl, XMLEntityResolver resolver, boolean isClientSide, Container container, PolicyResolver policyResolver, WSDLParserExtension... extensions) throws IOException, XMLStreamException, SAXException {
299 assert resolver != null; 315 assert resolver != null;
300 RuntimeWSDLParser parser = new RuntimeWSDLParser( wsdl.systemId.toExternalForm(), resolver, isClientSide, container, policyResolver, extensions); 316 RuntimeWSDLParser parser = new RuntimeWSDLParser( wsdl.systemId.toExternalForm(), resolver, isClientSide, container, policyResolver, extensions);
301 parser.extensionFacade.start(parser.context); 317 parser.extensionFacade.start(parser.context);
302 parser.parseWSDL(wsdl, false); 318 parser.parseWSDL(wsdl, false);
303 parser.wsdlDoc.freeze(); 319 parser.wsdlDoc.freeze();
304 parser.extensionFacade.finished(parser.context); 320 parser.extensionFacade.finished(parser.context);
305 parser.extensionFacade.postFinished(parser.context); 321 parser.extensionFacade.postFinished(parser.context);
306 return parser.wsdlDoc; 322 return parser.wsdlDoc;
307 } 323 }
308 324
309 public static WSDLModelImpl parse(XMLEntityResolver.Parser wsdl, XMLEntityResolver resolver, boolean isClientSide, Container container, WSDLParserExtension... extensions) throws IOException, XMLStreamException, SAXException { 325 public static WSDLModel parse(XMLEntityResolver.Parser wsdl, XMLEntityResolver resolver, boolean isClientSide, Container container, WSDLParserExtension... extensions) throws IOException, XMLStreamException, SAXException {
310 assert resolver != null; 326 assert resolver != null;
311 RuntimeWSDLParser parser = new RuntimeWSDLParser( wsdl.systemId.toExternalForm(), resolver, isClientSide, container, PolicyResolverFactory.create(), extensions); 327 RuntimeWSDLParser parser = new RuntimeWSDLParser( wsdl.systemId.toExternalForm(), resolver, isClientSide, container, PolicyResolverFactory.create(), extensions);
312 parser.extensionFacade.start(parser.context); 328 parser.extensionFacade.start(parser.context);
313 parser.parseWSDL(wsdl, false); 329 parser.parseWSDL(wsdl, false);
314 parser.wsdlDoc.freeze(); 330 parser.wsdlDoc.freeze();
458 private void parseService(XMLStreamReader reader) { 474 private void parseService(XMLStreamReader reader) {
459 service_nsdecl.putAll(wsdldef_nsdecl); 475 service_nsdecl.putAll(wsdldef_nsdecl);
460 readNSDecl(service_nsdecl,reader); 476 readNSDecl(service_nsdecl,reader);
461 477
462 String serviceName = ParserUtil.getMandatoryNonEmptyAttribute(reader, WSDLConstants.ATTR_NAME); 478 String serviceName = ParserUtil.getMandatoryNonEmptyAttribute(reader, WSDLConstants.ATTR_NAME);
463 WSDLServiceImpl service = new WSDLServiceImpl(reader,wsdlDoc,new QName(targetNamespace, serviceName)); 479 EditableWSDLService service = new WSDLServiceImpl(reader,wsdlDoc,new QName(targetNamespace, serviceName));
464 extensionFacade.serviceAttributes(service, reader); 480 extensionFacade.serviceAttributes(service, reader);
465 while (XMLStreamReaderUtil.nextElementContent(reader) != XMLStreamConstants.END_ELEMENT) { 481 while (XMLStreamReaderUtil.nextElementContent(reader) != XMLStreamConstants.END_ELEMENT) {
466 QName name = reader.getName(); 482 QName name = reader.getName();
467 if (WSDLConstants.QNAME_PORT.equals(name)) { 483 if (WSDLConstants.QNAME_PORT.equals(name)) {
468 parsePort(reader, service); 484 parsePort(reader, service);
475 } 491 }
476 wsdlDoc.addService(service); 492 wsdlDoc.addService(service);
477 service_nsdecl = new HashMap<String, String>(); 493 service_nsdecl = new HashMap<String, String>();
478 } 494 }
479 495
480 private void parsePort(XMLStreamReader reader, WSDLServiceImpl service) { 496 private void parsePort(XMLStreamReader reader, EditableWSDLService service) {
481 port_nsdecl.putAll(service_nsdecl); 497 port_nsdecl.putAll(service_nsdecl);
482 readNSDecl(port_nsdecl,reader); 498 readNSDecl(port_nsdecl,reader);
483 499
484 String portName = ParserUtil.getMandatoryNonEmptyAttribute(reader, WSDLConstants.ATTR_NAME); 500 String portName = ParserUtil.getMandatoryNonEmptyAttribute(reader, WSDLConstants.ATTR_NAME);
485 String binding = ParserUtil.getMandatoryNonEmptyAttribute(reader, "binding"); 501 String binding = ParserUtil.getMandatoryNonEmptyAttribute(reader, "binding");
486 502
487 QName bindingName = ParserUtil.getQName(reader, binding); 503 QName bindingName = ParserUtil.getQName(reader, binding);
488 QName portQName = new QName(service.getName().getNamespaceURI(), portName); 504 QName portQName = new QName(service.getName().getNamespaceURI(), portName);
489 WSDLPortImpl port = new WSDLPortImpl(reader,service, portQName, bindingName); 505 EditableWSDLPort port = new WSDLPortImpl(reader,service, portQName, bindingName);
490 506
491 extensionFacade.portAttributes(port, reader); 507 extensionFacade.portAttributes(port, reader);
492 508
493 String location; 509 String location;
494 while (XMLStreamReaderUtil.nextElementContent(reader) != XMLStreamConstants.END_ELEMENT) { 510 while (XMLStreamReaderUtil.nextElementContent(reader) != XMLStreamConstants.END_ELEMENT) {
549 // 565 //
550 // wsdl:binding element for now 566 // wsdl:binding element for now
551 XMLStreamReaderUtil.skipElement(reader); 567 XMLStreamReaderUtil.skipElement(reader);
552 return; 568 return;
553 } 569 }
554 WSDLBoundPortTypeImpl binding = new WSDLBoundPortTypeImpl(reader,wsdlDoc, new QName(targetNamespace, bindingName), 570 EditableWSDLBoundPortType binding = new WSDLBoundPortTypeImpl(reader,wsdlDoc, new QName(targetNamespace, bindingName),
555 ParserUtil.getQName(reader, portTypeName)); 571 ParserUtil.getQName(reader, portTypeName));
556 extensionFacade.bindingAttributes(binding, reader); 572 extensionFacade.bindingAttributes(binding, reader);
557 573
558 while (XMLStreamReaderUtil.nextElementContent(reader) != XMLStreamConstants.END_ELEMENT) { 574 while (XMLStreamReaderUtil.nextElementContent(reader) != XMLStreamConstants.END_ELEMENT) {
559 QName name = reader.getName(); 575 QName name = reader.getName();
599 } 615 }
600 return soapVersion.equals(SOAPVersion.SOAP_11)?BindingID.SOAP11_HTTP:BindingID.SOAP12_HTTP; 616 return soapVersion.equals(SOAPVersion.SOAP_11)?BindingID.SOAP11_HTTP:BindingID.SOAP12_HTTP;
601 } 617 }
602 618
603 619
604 private void parseBindingOperation(XMLStreamReader reader, WSDLBoundPortTypeImpl binding) { 620 private void parseBindingOperation(XMLStreamReader reader, EditableWSDLBoundPortType binding) {
605 String bindingOpName = ParserUtil.getMandatoryNonEmptyAttribute(reader, "name"); 621 String bindingOpName = ParserUtil.getMandatoryNonEmptyAttribute(reader, "name");
606 if (bindingOpName == null) { 622 if (bindingOpName == null) {
607 //TODO: throw exception? 623 //TODO: throw exception?
608 //skip wsdl:binding element for now 624 //skip wsdl:binding element for now
609 XMLStreamReaderUtil.skipElement(reader); 625 XMLStreamReaderUtil.skipElement(reader);
610 return; 626 return;
611 } 627 }
612 628
613 QName opName = new QName(binding.getPortTypeName().getNamespaceURI(), bindingOpName); 629 QName opName = new QName(binding.getPortTypeName().getNamespaceURI(), bindingOpName);
614 WSDLBoundOperationImpl bindingOp = new WSDLBoundOperationImpl(reader,binding, opName); 630 EditableWSDLBoundOperation bindingOp = new WSDLBoundOperationImpl(reader,binding, opName);
615 binding.put(opName, bindingOp); 631 binding.put(opName, bindingOp);
616 extensionFacade.bindingOperationAttributes(bindingOp, reader); 632 extensionFacade.bindingOperationAttributes(bindingOp, reader);
617 633
618 while (XMLStreamReaderUtil.nextElementContent(reader) != XMLStreamConstants.END_ELEMENT) { 634 while (XMLStreamReaderUtil.nextElementContent(reader) != XMLStreamConstants.END_ELEMENT) {
619 QName name = reader.getName(); 635 QName name = reader.getName();
649 bindingOp.setStyle(binding.getStyle()); 665 bindingOp.setStyle(binding.getStyle());
650 } 666 }
651 } 667 }
652 } 668 }
653 669
654 private void parseInputBinding(XMLStreamReader reader, WSDLBoundOperationImpl bindingOp) { 670 private void parseInputBinding(XMLStreamReader reader, EditableWSDLBoundOperation bindingOp) {
655 boolean bodyFound = false; 671 boolean bodyFound = false;
656 extensionFacade.bindingOperationInputAttributes(bindingOp, reader); 672 extensionFacade.bindingOperationInputAttributes(bindingOp, reader);
657 while (XMLStreamReaderUtil.nextElementContent(reader) != XMLStreamConstants.END_ELEMENT) { 673 while (XMLStreamReaderUtil.nextElementContent(reader) != XMLStreamConstants.END_ELEMENT) {
658 QName name = reader.getName(); 674 QName name = reader.getName();
659 if ((SOAPConstants.QNAME_BODY.equals(name) || SOAPConstants.QNAME_SOAP12BODY.equals(name)) && !bodyFound) { 675 if ((SOAPConstants.QNAME_BODY.equals(name) || SOAPConstants.QNAME_SOAP12BODY.equals(name)) && !bodyFound) {
668 extensionFacade.bindingOperationInputElements(bindingOp, reader); 684 extensionFacade.bindingOperationInputElements(bindingOp, reader);
669 } 685 }
670 } 686 }
671 } 687 }
672 688
673 private void parseOutputBinding(XMLStreamReader reader, WSDLBoundOperationImpl bindingOp) { 689 private void parseOutputBinding(XMLStreamReader reader, EditableWSDLBoundOperation bindingOp) {
674 boolean bodyFound = false; 690 boolean bodyFound = false;
675 extensionFacade.bindingOperationOutputAttributes(bindingOp, reader); 691 extensionFacade.bindingOperationOutputAttributes(bindingOp, reader);
676 while (XMLStreamReaderUtil.nextElementContent(reader) != XMLStreamConstants.END_ELEMENT) { 692 while (XMLStreamReaderUtil.nextElementContent(reader) != XMLStreamConstants.END_ELEMENT) {
677 QName name = reader.getName(); 693 QName name = reader.getName();
678 if ((SOAPConstants.QNAME_BODY.equals(name) || SOAPConstants.QNAME_SOAP12BODY.equals(name)) && !bodyFound) { 694 if ((SOAPConstants.QNAME_BODY.equals(name) || SOAPConstants.QNAME_SOAP12BODY.equals(name)) && !bodyFound) {
687 extensionFacade.bindingOperationOutputElements(bindingOp, reader); 703 extensionFacade.bindingOperationOutputElements(bindingOp, reader);
688 } 704 }
689 } 705 }
690 } 706 }
691 707
692 private void parseFaultBinding(XMLStreamReader reader, WSDLBoundOperationImpl bindingOp) { 708 private void parseFaultBinding(XMLStreamReader reader, EditableWSDLBoundOperation bindingOp) {
693 String faultName = ParserUtil.getMandatoryNonEmptyAttribute(reader, "name"); 709 String faultName = ParserUtil.getMandatoryNonEmptyAttribute(reader, "name");
694 WSDLBoundFaultImpl wsdlBoundFault = new WSDLBoundFaultImpl(reader, faultName, bindingOp); 710 EditableWSDLBoundFault wsdlBoundFault = new WSDLBoundFaultImpl(reader, faultName, bindingOp);
695 bindingOp.addFault(wsdlBoundFault); 711 bindingOp.addFault(wsdlBoundFault);
696 712
697 extensionFacade.bindingOperationFaultAttributes(wsdlBoundFault, reader); 713 extensionFacade.bindingOperationFaultAttributes(wsdlBoundFault, reader);
698 714
699 while (XMLStreamReaderUtil.nextElementContent(reader) != XMLStreamConstants.END_ELEMENT) { 715 while (XMLStreamReaderUtil.nextElementContent(reader) != XMLStreamConstants.END_ELEMENT) {
702 } 718 }
703 719
704 private enum BindingMode { 720 private enum BindingMode {
705 INPUT, OUTPUT, FAULT} 721 INPUT, OUTPUT, FAULT}
706 722
707 private static boolean parseSOAPBodyBinding(XMLStreamReader reader, WSDLBoundOperationImpl op, BindingMode mode) { 723 private static boolean parseSOAPBodyBinding(XMLStreamReader reader, EditableWSDLBoundOperation op, BindingMode mode) {
708 String namespace = reader.getAttributeValue(null, "namespace"); 724 String namespace = reader.getAttributeValue(null, "namespace");
709 if (mode == BindingMode.INPUT) { 725 if (mode == BindingMode.INPUT) {
710 op.setRequestNamespace(namespace); 726 op.setRequestNamespace(namespace);
711 return parseSOAPBodyBinding(reader, op.getInputParts()); 727 return parseSOAPBodyBinding(reader, op.getInputParts());
712 } 728 }
747 parts.put(part, ParameterBinding.HEADER); 763 parts.put(part, ParameterBinding.HEADER);
748 goToEnd(reader); 764 goToEnd(reader);
749 } 765 }
750 766
751 767
752 private static void parseMimeMultipartBinding(XMLStreamReader reader, WSDLBoundOperationImpl op, BindingMode mode) { 768 private static void parseMimeMultipartBinding(XMLStreamReader reader, EditableWSDLBoundOperation op, BindingMode mode) {
753 while (XMLStreamReaderUtil.nextElementContent(reader) != XMLStreamConstants.END_ELEMENT) { 769 while (XMLStreamReaderUtil.nextElementContent(reader) != XMLStreamConstants.END_ELEMENT) {
754 QName name = reader.getName(); 770 QName name = reader.getName();
755 if (MIMEConstants.QNAME_PART.equals(name)) { 771 if (MIMEConstants.QNAME_PART.equals(name)) {
756 parseMIMEPart(reader, op, mode); 772 parseMIMEPart(reader, op, mode);
757 } else { 773 } else {
758 XMLStreamReaderUtil.skipElement(reader); 774 XMLStreamReaderUtil.skipElement(reader);
759 } 775 }
760 } 776 }
761 } 777 }
762 778
763 private static void parseMIMEPart(XMLStreamReader reader, WSDLBoundOperationImpl op, BindingMode mode) { 779 private static void parseMIMEPart(XMLStreamReader reader, EditableWSDLBoundOperation op, BindingMode mode) {
764 boolean bodyFound = false; 780 boolean bodyFound = false;
765 Map<String, ParameterBinding> parts = null; 781 Map<String, ParameterBinding> parts = null;
766 if (mode == BindingMode.INPUT) { 782 if (mode == BindingMode.INPUT) {
767 parts = op.getInputParts(); 783 parts = op.getInputParts();
768 } else if (mode == BindingMode.OUTPUT) { 784 } else if (mode == BindingMode.OUTPUT) {
818 //TODO: throw exception? 834 //TODO: throw exception?
819 //skip wsdl:portType element for now 835 //skip wsdl:portType element for now
820 XMLStreamReaderUtil.skipElement(reader); 836 XMLStreamReaderUtil.skipElement(reader);
821 return; 837 return;
822 } 838 }
823 WSDLPortTypeImpl portType = new WSDLPortTypeImpl(reader,wsdlDoc, new QName(targetNamespace, portTypeName)); 839 EditableWSDLPortType portType = new WSDLPortTypeImpl(reader,wsdlDoc, new QName(targetNamespace, portTypeName));
824 extensionFacade.portTypeAttributes(portType, reader); 840 extensionFacade.portTypeAttributes(portType, reader);
825 wsdlDoc.addPortType(portType); 841 wsdlDoc.addPortType(portType);
826 while (XMLStreamReaderUtil.nextElementContent(reader) != XMLStreamConstants.END_ELEMENT) { 842 while (XMLStreamReaderUtil.nextElementContent(reader) != XMLStreamConstants.END_ELEMENT) {
827 QName name = reader.getName(); 843 QName name = reader.getName();
828 if (WSDLConstants.QNAME_OPERATION.equals(name)) { 844 if (WSDLConstants.QNAME_OPERATION.equals(name)) {
832 } 848 }
833 } 849 }
834 } 850 }
835 851
836 852
837 private void parsePortTypeOperation(XMLStreamReader reader, WSDLPortTypeImpl portType) { 853 private void parsePortTypeOperation(XMLStreamReader reader, EditableWSDLPortType portType) {
838 String operationName = ParserUtil.getMandatoryNonEmptyAttribute(reader, WSDLConstants.ATTR_NAME); 854 String operationName = ParserUtil.getMandatoryNonEmptyAttribute(reader, WSDLConstants.ATTR_NAME);
839 if (operationName == null) { 855 if (operationName == null) {
840 //TODO: throw exception? 856 //TODO: throw exception?
841 //skip wsdl:portType element for now 857 //skip wsdl:portType element for now
842 XMLStreamReaderUtil.skipElement(reader); 858 XMLStreamReaderUtil.skipElement(reader);
843 return; 859 return;
844 } 860 }
845 861
846 QName operationQName = new QName(portType.getName().getNamespaceURI(), operationName); 862 QName operationQName = new QName(portType.getName().getNamespaceURI(), operationName);
847 WSDLOperationImpl operation = new WSDLOperationImpl(reader,portType, operationQName); 863 EditableWSDLOperation operation = new WSDLOperationImpl(reader,portType, operationQName);
848 extensionFacade.portTypeOperationAttributes(operation, reader); 864 extensionFacade.portTypeOperationAttributes(operation, reader);
849 String parameterOrder = ParserUtil.getAttribute(reader, "parameterOrder"); 865 String parameterOrder = ParserUtil.getAttribute(reader, "parameterOrder");
850 operation.setParameterOrder(parameterOrder); 866 operation.setParameterOrder(parameterOrder);
851 portType.put(operationName, operation); 867 portType.put(operationName, operation);
852 while (XMLStreamReaderUtil.nextElementContent(reader) != XMLStreamConstants.END_ELEMENT) { 868 while (XMLStreamReaderUtil.nextElementContent(reader) != XMLStreamConstants.END_ELEMENT) {
862 } 878 }
863 } 879 }
864 } 880 }
865 881
866 882
867 private void parsePortTypeOperationFault(XMLStreamReader reader, WSDLOperationImpl operation) { 883 private void parsePortTypeOperationFault(XMLStreamReader reader, EditableWSDLOperation operation) {
868 String msg = ParserUtil.getMandatoryNonEmptyAttribute(reader, "message"); 884 String msg = ParserUtil.getMandatoryNonEmptyAttribute(reader, "message");
869 QName msgName = ParserUtil.getQName(reader, msg); 885 QName msgName = ParserUtil.getQName(reader, msg);
870 String name = ParserUtil.getMandatoryNonEmptyAttribute(reader, "name"); 886 String name = ParserUtil.getMandatoryNonEmptyAttribute(reader, "name");
871 WSDLFaultImpl fault = new WSDLFaultImpl(reader,name, msgName, operation); 887 EditableWSDLFault fault = new WSDLFaultImpl(reader,name, msgName, operation);
872 operation.addFault(fault); 888 operation.addFault(fault);
873 extensionFacade.portTypeOperationFaultAttributes(fault, reader); 889 extensionFacade.portTypeOperationFaultAttributes(fault, reader);
874 extensionFacade.portTypeOperationFault(operation, reader); 890 extensionFacade.portTypeOperationFault(operation, reader);
875 while (XMLStreamReaderUtil.nextElementContent(reader) != XMLStreamConstants.END_ELEMENT) { 891 while (XMLStreamReaderUtil.nextElementContent(reader) != XMLStreamConstants.END_ELEMENT) {
876 extensionFacade.portTypeOperationFaultElements(fault, reader); 892 extensionFacade.portTypeOperationFaultElements(fault, reader);
877 } 893 }
878 } 894 }
879 895
880 private void parsePortTypeOperationInput(XMLStreamReader reader, WSDLOperationImpl operation) { 896 private void parsePortTypeOperationInput(XMLStreamReader reader, EditableWSDLOperation operation) {
881 String msg = ParserUtil.getMandatoryNonEmptyAttribute(reader, "message"); 897 String msg = ParserUtil.getMandatoryNonEmptyAttribute(reader, "message");
882 QName msgName = ParserUtil.getQName(reader, msg); 898 QName msgName = ParserUtil.getQName(reader, msg);
883 String name = ParserUtil.getAttribute(reader, "name"); 899 String name = ParserUtil.getAttribute(reader, "name");
884 WSDLInputImpl input = new WSDLInputImpl(reader, name, msgName, operation); 900 EditableWSDLInput input = new WSDLInputImpl(reader, name, msgName, operation);
885 operation.setInput(input); 901 operation.setInput(input);
886 extensionFacade.portTypeOperationInputAttributes(input, reader); 902 extensionFacade.portTypeOperationInputAttributes(input, reader);
887 extensionFacade.portTypeOperationInput(operation, reader); 903 extensionFacade.portTypeOperationInput(operation, reader);
888 while (XMLStreamReaderUtil.nextElementContent(reader) != XMLStreamConstants.END_ELEMENT) { 904 while (XMLStreamReaderUtil.nextElementContent(reader) != XMLStreamConstants.END_ELEMENT) {
889 extensionFacade.portTypeOperationInputElements(input, reader); 905 extensionFacade.portTypeOperationInputElements(input, reader);
890 } 906 }
891 } 907 }
892 908
893 private void parsePortTypeOperationOutput(XMLStreamReader reader, WSDLOperationImpl operation) { 909 private void parsePortTypeOperationOutput(XMLStreamReader reader, EditableWSDLOperation operation) {
894 String msg = ParserUtil.getAttribute(reader, "message"); 910 String msg = ParserUtil.getAttribute(reader, "message");
895 QName msgName = ParserUtil.getQName(reader, msg); 911 QName msgName = ParserUtil.getQName(reader, msg);
896 String name = ParserUtil.getAttribute(reader, "name"); 912 String name = ParserUtil.getAttribute(reader, "name");
897 WSDLOutputImpl output = new WSDLOutputImpl(reader,name, msgName, operation); 913 EditableWSDLOutput output = new WSDLOutputImpl(reader,name, msgName, operation);
898 operation.setOutput(output); 914 operation.setOutput(output);
899 extensionFacade.portTypeOperationOutputAttributes(output, reader); 915 extensionFacade.portTypeOperationOutputAttributes(output, reader);
900 extensionFacade.portTypeOperationOutput(operation, reader); 916 extensionFacade.portTypeOperationOutput(operation, reader);
901 while (XMLStreamReaderUtil.nextElementContent(reader) != XMLStreamConstants.END_ELEMENT) { 917 while (XMLStreamReaderUtil.nextElementContent(reader) != XMLStreamConstants.END_ELEMENT) {
902 extensionFacade.portTypeOperationOutputElements(output, reader); 918 extensionFacade.portTypeOperationOutputElements(output, reader);
903 } 919 }
904 } 920 }
905 921
906 private void parseMessage(XMLStreamReader reader) { 922 private void parseMessage(XMLStreamReader reader) {
907 String msgName = ParserUtil.getMandatoryNonEmptyAttribute(reader, WSDLConstants.ATTR_NAME); 923 String msgName = ParserUtil.getMandatoryNonEmptyAttribute(reader, WSDLConstants.ATTR_NAME);
908 WSDLMessageImpl msg = new WSDLMessageImpl(reader,new QName(targetNamespace, msgName)); 924 EditableWSDLMessage msg = new WSDLMessageImpl(reader,new QName(targetNamespace, msgName));
909 extensionFacade.messageAttributes(msg, reader); 925 extensionFacade.messageAttributes(msg, reader);
910 int partIndex = 0; 926 int partIndex = 0;
911 while (XMLStreamReaderUtil.nextElementContent(reader) != XMLStreamConstants.END_ELEMENT) { 927 while (XMLStreamReaderUtil.nextElementContent(reader) != XMLStreamConstants.END_ELEMENT) {
912 QName name = reader.getName(); 928 QName name = reader.getName();
913 if (WSDLConstants.QNAME_PART.equals(name)) { 929 if (WSDLConstants.QNAME_PART.equals(name)) {
926 desc = reader.getAttributeValue(i); 942 desc = reader.getAttributeValue(i);
927 break; 943 break;
928 } 944 }
929 } 945 }
930 if (desc != null) { 946 if (desc != null) {
931 WSDLPartImpl wsdlPart = new WSDLPartImpl(reader, part, partIndex, new WSDLPartDescriptorImpl(reader,ParserUtil.getQName(reader, desc), kind)); 947 EditableWSDLPart wsdlPart = new WSDLPartImpl(reader, part, partIndex, new WSDLPartDescriptorImpl(reader,ParserUtil.getQName(reader, desc), kind));
932 msg.add(wsdlPart); 948 msg.add(wsdlPart);
933 } 949 }
934 if (reader.getEventType() != XMLStreamConstants.END_ELEMENT) 950 if (reader.getEventType() != XMLStreamConstants.END_ELEMENT)
935 goToEnd(reader); 951 goToEnd(reader);
936 } else { 952 } else {

mercurial