1 /* |
1 /* |
2 * Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved. |
2 * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved. |
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. |
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. |
4 * |
4 * |
5 * This code is free software; you can redistribute it and/or modify it |
5 * This code is free software; you can redistribute it and/or modify it |
6 * under the terms of the GNU General Public License version 2 only, as |
6 * under the terms of the GNU General Public License version 2 only, as |
7 * published by the Free Software Foundation. Oracle designates this |
7 * published by the Free Software Foundation. Oracle designates this |
25 |
25 |
26 package com.sun.tools.internal.ws.wsdl.parser; |
26 package com.sun.tools.internal.ws.wsdl.parser; |
27 |
27 |
28 import com.sun.tools.internal.ws.api.wsdl.TWSDLExtensible; |
28 import com.sun.tools.internal.ws.api.wsdl.TWSDLExtensible; |
29 import com.sun.tools.internal.ws.api.wsdl.TWSDLParserContext; |
29 import com.sun.tools.internal.ws.api.wsdl.TWSDLParserContext; |
|
30 import com.sun.tools.internal.ws.resources.ModelerMessages; |
|
31 import com.sun.tools.internal.ws.resources.WsdlMessages; |
|
32 import com.sun.tools.internal.ws.util.xml.XmlUtil; |
30 import com.sun.tools.internal.ws.wscompile.ErrorReceiver; |
33 import com.sun.tools.internal.ws.wscompile.ErrorReceiver; |
|
34 import com.sun.tools.internal.ws.wsdl.document.Fault; |
|
35 import com.sun.tools.internal.ws.wsdl.document.Input; |
|
36 import com.sun.tools.internal.ws.wsdl.document.Output; |
|
37 import com.sun.xml.internal.ws.addressing.W3CAddressingMetadataConstants; |
31 import com.sun.xml.internal.ws.api.addressing.AddressingVersion; |
38 import com.sun.xml.internal.ws.api.addressing.AddressingVersion; |
32 import org.w3c.dom.Element; |
39 import org.w3c.dom.Element; |
|
40 import org.xml.sax.Locator; |
33 |
41 |
34 import javax.xml.namespace.QName; |
42 import javax.xml.namespace.QName; |
35 import java.util.Map; |
43 import java.util.Map; |
|
44 |
|
45 import static com.sun.xml.internal.ws.addressing.v200408.MemberSubmissionAddressingConstants.WSA_ACTION_QNAME; |
36 |
46 |
37 /** |
47 /** |
38 * @author Arun Gupta |
48 * @author Arun Gupta |
39 */ |
49 */ |
40 public class MemberSubmissionAddressingExtensionHandler extends W3CAddressingExtensionHandler { |
50 public class MemberSubmissionAddressingExtensionHandler extends W3CAddressingExtensionHandler { |
41 public MemberSubmissionAddressingExtensionHandler(Map<String, AbstractExtensionHandler> extensionHandlerMap) { |
|
42 super(extensionHandlerMap); |
|
43 } |
|
44 |
51 |
45 public MemberSubmissionAddressingExtensionHandler(Map<String, AbstractExtensionHandler> extensionHandlerMap, ErrorReceiver env) { |
52 private ErrorReceiver errReceiver; |
|
53 private boolean extensionModeOn; |
|
54 |
|
55 public MemberSubmissionAddressingExtensionHandler(Map<String, AbstractExtensionHandler> extensionHandlerMap, ErrorReceiver env, boolean extensionModeOn) { |
46 super(extensionHandlerMap, env); |
56 super(extensionHandlerMap, env); |
|
57 this.errReceiver = env; |
|
58 this.extensionModeOn = extensionModeOn; |
47 } |
59 } |
48 |
60 |
49 @Override |
61 @Override |
50 public String getNamespaceURI() { |
62 public String getNamespaceURI() { |
51 return AddressingVersion.MEMBER.wsdlNsUri; |
63 return AddressingVersion.MEMBER.wsdlNsUri; |
59 public boolean handlePortExtension(TWSDLParserContext context, TWSDLExtensible parent, Element e) { |
71 public boolean handlePortExtension(TWSDLParserContext context, TWSDLExtensible parent, Element e) { |
60 // ignore any extension elements |
72 // ignore any extension elements |
61 return false; |
73 return false; |
62 } |
74 } |
63 |
75 |
|
76 @Override |
|
77 public boolean handleInputExtension(TWSDLParserContext context, TWSDLExtensible parent, Element e) { |
|
78 if (extensionModeOn) { |
|
79 warn(context.getLocation(e)); |
|
80 String actionValue = XmlUtil.getAttributeNSOrNull(e, WSA_ACTION_QNAME); |
|
81 if (actionValue == null || actionValue.equals("")) { |
|
82 return warnEmptyAction(parent, context.getLocation(e)); |
|
83 } |
|
84 ((Input) parent).setAction(actionValue); |
|
85 return true; |
|
86 } else { |
|
87 return fail(context.getLocation(e)); |
|
88 } |
|
89 } |
|
90 |
|
91 private boolean fail(Locator location) { |
|
92 errReceiver.warning(location, |
|
93 ModelerMessages.WSDLMODELER_INVALID_IGNORING_MEMBER_SUBMISSION_ADDRESSING( |
|
94 AddressingVersion.MEMBER.nsUri, W3CAddressingMetadataConstants.WSAM_NAMESPACE_NAME)); |
|
95 return false; |
|
96 } |
|
97 |
|
98 private void warn(Locator location) { |
|
99 errReceiver.warning(location, |
|
100 ModelerMessages.WSDLMODELER_WARNING_MEMBER_SUBMISSION_ADDRESSING_USED( |
|
101 AddressingVersion.MEMBER.nsUri, W3CAddressingMetadataConstants.WSAM_NAMESPACE_NAME)); |
|
102 } |
|
103 |
|
104 @Override |
|
105 public boolean handleOutputExtension(TWSDLParserContext context, TWSDLExtensible parent, Element e) { |
|
106 if (extensionModeOn) { |
|
107 warn(context.getLocation(e)); |
|
108 String actionValue = XmlUtil.getAttributeNSOrNull(e, WSA_ACTION_QNAME); |
|
109 if (actionValue == null || actionValue.equals("")) { |
|
110 return warnEmptyAction(parent, context.getLocation(e)); |
|
111 } |
|
112 ((Output) parent).setAction(actionValue); |
|
113 return true; |
|
114 } else { |
|
115 return fail(context.getLocation(e)); |
|
116 } |
|
117 } |
|
118 |
|
119 @Override |
|
120 public boolean handleFaultExtension(TWSDLParserContext context, TWSDLExtensible parent, Element e) { |
|
121 if (extensionModeOn) { |
|
122 warn(context.getLocation(e)); |
|
123 String actionValue = XmlUtil.getAttributeNSOrNull(e, WSA_ACTION_QNAME); |
|
124 if (actionValue == null || actionValue.equals("")) { |
|
125 errReceiver.warning(context.getLocation(e), WsdlMessages.WARNING_FAULT_EMPTY_ACTION(parent.getNameValue(), parent.getWSDLElementName().getLocalPart(), parent.getParent().getNameValue())); |
|
126 return false; // keep compiler happy |
|
127 } |
|
128 ((Fault) parent).setAction(actionValue); |
|
129 return true; |
|
130 } else { |
|
131 return fail(context.getLocation(e)); |
|
132 } |
|
133 } |
|
134 |
|
135 private boolean warnEmptyAction(TWSDLExtensible parent, Locator pos) { |
|
136 errReceiver.warning(pos, WsdlMessages.WARNING_INPUT_OUTPUT_EMPTY_ACTION(parent.getWSDLElementName().getLocalPart(), parent.getParent().getNameValue())); |
|
137 return false; |
|
138 } |
64 } |
139 } |