1.1 --- a/src/share/jaxws_classes/com/sun/tools/internal/ws/wsdl/parser/MemberSubmissionAddressingExtensionHandler.java Thu Apr 04 19:05:24 2013 -0700 1.2 +++ b/src/share/jaxws_classes/com/sun/tools/internal/ws/wsdl/parser/MemberSubmissionAddressingExtensionHandler.java Tue Apr 09 14:51:13 2013 +0100 1.3 @@ -1,5 +1,5 @@ 1.4 /* 1.5 - * Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved. 1.6 + * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved. 1.7 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 1.8 * 1.9 * This code is free software; you can redistribute it and/or modify it 1.10 @@ -27,23 +27,35 @@ 1.11 1.12 import com.sun.tools.internal.ws.api.wsdl.TWSDLExtensible; 1.13 import com.sun.tools.internal.ws.api.wsdl.TWSDLParserContext; 1.14 +import com.sun.tools.internal.ws.resources.ModelerMessages; 1.15 +import com.sun.tools.internal.ws.resources.WsdlMessages; 1.16 +import com.sun.tools.internal.ws.util.xml.XmlUtil; 1.17 import com.sun.tools.internal.ws.wscompile.ErrorReceiver; 1.18 +import com.sun.tools.internal.ws.wsdl.document.Fault; 1.19 +import com.sun.tools.internal.ws.wsdl.document.Input; 1.20 +import com.sun.tools.internal.ws.wsdl.document.Output; 1.21 +import com.sun.xml.internal.ws.addressing.W3CAddressingMetadataConstants; 1.22 import com.sun.xml.internal.ws.api.addressing.AddressingVersion; 1.23 import org.w3c.dom.Element; 1.24 +import org.xml.sax.Locator; 1.25 1.26 import javax.xml.namespace.QName; 1.27 import java.util.Map; 1.28 1.29 +import static com.sun.xml.internal.ws.addressing.v200408.MemberSubmissionAddressingConstants.WSA_ACTION_QNAME; 1.30 + 1.31 /** 1.32 * @author Arun Gupta 1.33 */ 1.34 public class MemberSubmissionAddressingExtensionHandler extends W3CAddressingExtensionHandler { 1.35 - public MemberSubmissionAddressingExtensionHandler(Map<String, AbstractExtensionHandler> extensionHandlerMap) { 1.36 - super(extensionHandlerMap); 1.37 - } 1.38 1.39 - public MemberSubmissionAddressingExtensionHandler(Map<String, AbstractExtensionHandler> extensionHandlerMap, ErrorReceiver env) { 1.40 + private ErrorReceiver errReceiver; 1.41 + private boolean extensionModeOn; 1.42 + 1.43 + public MemberSubmissionAddressingExtensionHandler(Map<String, AbstractExtensionHandler> extensionHandlerMap, ErrorReceiver env, boolean extensionModeOn) { 1.44 super(extensionHandlerMap, env); 1.45 + this.errReceiver = env; 1.46 + this.extensionModeOn = extensionModeOn; 1.47 } 1.48 1.49 @Override 1.50 @@ -61,4 +73,67 @@ 1.51 return false; 1.52 } 1.53 1.54 + @Override 1.55 + public boolean handleInputExtension(TWSDLParserContext context, TWSDLExtensible parent, Element e) { 1.56 + if (extensionModeOn) { 1.57 + warn(context.getLocation(e)); 1.58 + String actionValue = XmlUtil.getAttributeNSOrNull(e, WSA_ACTION_QNAME); 1.59 + if (actionValue == null || actionValue.equals("")) { 1.60 + return warnEmptyAction(parent, context.getLocation(e)); 1.61 + } 1.62 + ((Input) parent).setAction(actionValue); 1.63 + return true; 1.64 + } else { 1.65 + return fail(context.getLocation(e)); 1.66 + } 1.67 + } 1.68 + 1.69 + private boolean fail(Locator location) { 1.70 + errReceiver.warning(location, 1.71 + ModelerMessages.WSDLMODELER_INVALID_IGNORING_MEMBER_SUBMISSION_ADDRESSING( 1.72 + AddressingVersion.MEMBER.nsUri, W3CAddressingMetadataConstants.WSAM_NAMESPACE_NAME)); 1.73 + return false; 1.74 + } 1.75 + 1.76 + private void warn(Locator location) { 1.77 + errReceiver.warning(location, 1.78 + ModelerMessages.WSDLMODELER_WARNING_MEMBER_SUBMISSION_ADDRESSING_USED( 1.79 + AddressingVersion.MEMBER.nsUri, W3CAddressingMetadataConstants.WSAM_NAMESPACE_NAME)); 1.80 + } 1.81 + 1.82 + @Override 1.83 + public boolean handleOutputExtension(TWSDLParserContext context, TWSDLExtensible parent, Element e) { 1.84 + if (extensionModeOn) { 1.85 + warn(context.getLocation(e)); 1.86 + String actionValue = XmlUtil.getAttributeNSOrNull(e, WSA_ACTION_QNAME); 1.87 + if (actionValue == null || actionValue.equals("")) { 1.88 + return warnEmptyAction(parent, context.getLocation(e)); 1.89 + } 1.90 + ((Output) parent).setAction(actionValue); 1.91 + return true; 1.92 + } else { 1.93 + return fail(context.getLocation(e)); 1.94 + } 1.95 + } 1.96 + 1.97 + @Override 1.98 + public boolean handleFaultExtension(TWSDLParserContext context, TWSDLExtensible parent, Element e) { 1.99 + if (extensionModeOn) { 1.100 + warn(context.getLocation(e)); 1.101 + String actionValue = XmlUtil.getAttributeNSOrNull(e, WSA_ACTION_QNAME); 1.102 + if (actionValue == null || actionValue.equals("")) { 1.103 + errReceiver.warning(context.getLocation(e), WsdlMessages.WARNING_FAULT_EMPTY_ACTION(parent.getNameValue(), parent.getWSDLElementName().getLocalPart(), parent.getParent().getNameValue())); 1.104 + return false; // keep compiler happy 1.105 + } 1.106 + ((Fault) parent).setAction(actionValue); 1.107 + return true; 1.108 + } else { 1.109 + return fail(context.getLocation(e)); 1.110 + } 1.111 + } 1.112 + 1.113 + private boolean warnEmptyAction(TWSDLExtensible parent, Locator pos) { 1.114 + errReceiver.warning(pos, WsdlMessages.WARNING_INPUT_OUTPUT_EMPTY_ACTION(parent.getWSDLElementName().getLocalPart(), parent.getParent().getNameValue())); 1.115 + return false; 1.116 + } 1.117 }