/* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.tomcat.util.descriptor.web; import java.util.Arrays; import java.util.HashMap; import java.util.Iterator; import java.util.Map; /** * Representation of a web service reference for a web application, as * represented in a <code><service-ref></code> element in the * deployment descriptor. * * @author Fabien Carrion */ public class ContextService extends ResourceBase { private static final long serialVersionUID = 1L; // ------------------------------------------------------------- Properties /** * The WebService reference name. */ private String displayname = null; public String getDisplayname() { return this.displayname; } public void setDisplayname(String displayname) { this.displayname = displayname; } /** * A large icon for this WebService. */ private String largeIcon = null; public String getLargeIcon() { return this.largeIcon; } public void setLargeIcon(String largeIcon) { this.largeIcon = largeIcon; } /** * A small icon for this WebService. */ private String smallIcon = null; public String getSmallIcon() { return this.smallIcon; } public void setSmallIcon(String smallIcon) { this.smallIcon = smallIcon; } /** * The fully qualified class name of the JAX-WS Service interface that the * client depends on. */ private String serviceInterface = null; public String getInterface() { return serviceInterface; } public void setInterface(String serviceInterface) { this.serviceInterface = serviceInterface; } /** * Contains the location (relative to the root of * the module) of the web service WSDL description. */ private String wsdlfile = null; public String getWsdlfile() { return this.wsdlfile; } public void setWsdlfile(String wsdlfile) { this.wsdlfile = wsdlfile; } /** * A file specifying the correlation of the WSDL definition * to the interfaces (Service Endpoint Interface, Service Interface). */ private String jaxrpcmappingfile = null; public String getJaxrpcmappingfile() { return this.jaxrpcmappingfile; } public void setJaxrpcmappingfile(String jaxrpcmappingfile) { this.jaxrpcmappingfile = jaxrpcmappingfile; } /** * Declares the specific WSDL service element that is being referred to. * It is not specified if no wsdl-file is declared or if WSDL contains only * 1 service element. * * A service-qname is composed by a namespaceURI and a localpart. * It must be defined if more than 1 service is declared in the WSDL. * * serviceqname[0] : namespaceURI * serviceqname[1] : localpart */ private String[] serviceqname = new String[2]; public String[] getServiceqname() { return this.serviceqname; } public String getServiceqname(int i) { return this.serviceqname[i]; } public String getServiceqnameNamespaceURI() { return this.serviceqname[0]; } public String getServiceqnameLocalpart() { return this.serviceqname[1]; } public void setServiceqname(String[] serviceqname) { this.serviceqname = serviceqname; } public void setServiceqname(String serviceqname, int i) { this.serviceqname[i] = serviceqname; } public void setServiceqnameNamespaceURI(String namespaceuri) { this.serviceqname[0] = namespaceuri; } public void setServiceqnameLocalpart(String localpart) { this.serviceqname[1] = localpart; } /** * Declares a client dependency on the container to resolving a Service Endpoint Interface * to a WSDL port. It optionally associates the Service Endpoint Interface with a * particular port-component. * @return the endpoint names */ public Iterator<String> getServiceendpoints() { return this.listProperties(); } public String getPortlink(String serviceendpoint) { return (String) this.getProperty(serviceendpoint); } public void addPortcomponent(String serviceendpoint, String portlink) { if (portlink == null) portlink = ""; this.setProperty(serviceendpoint, portlink); } /** * A list of Handlers to use for this service-ref. * * The instantiation of the handler have to be done. */ private final Map<String, ContextHandler> handlers = new HashMap<>(); public Iterator<String> getHandlers() { return handlers.keySet().iterator(); } public ContextHandler getHandler(String handlername) { return handlers.get(handlername); } public void addHandler(ContextHandler handler) { handlers.put(handler.getName(), handler); } // --------------------------------------------------------- Public Methods /** * Return a String representation of this object. */ @Override public String toString() { StringBuilder sb = new StringBuilder("ContextService["); sb.append("name="); sb.append(getName()); if (getDescription() != null) { sb.append(", description="); sb.append(getDescription()); } if (getType() != null) { sb.append(", type="); sb.append(getType()); } if (displayname != null) { sb.append(", displayname="); sb.append(displayname); } if (largeIcon != null) { sb.append(", largeIcon="); sb.append(largeIcon); } if (smallIcon != null) { sb.append(", smallIcon="); sb.append(smallIcon); } if (wsdlfile != null) { sb.append(", wsdl-file="); sb.append(wsdlfile); } if (jaxrpcmappingfile != null) { sb.append(", jaxrpc-mapping-file="); sb.append(jaxrpcmappingfile); } if (serviceqname[0] != null) { sb.append(", service-qname/namespaceURI="); sb.append(serviceqname[0]); } if (serviceqname[1] != null) { sb.append(", service-qname/localpart="); sb.append(serviceqname[1]); } if (this.getServiceendpoints() != null) { sb.append(", port-component/service-endpoint-interface="); sb.append(this.getServiceendpoints()); } if (handlers != null) { sb.append(", handler="); sb.append(handlers); } sb.append("]"); return sb.toString(); } @Override public int hashCode() { final int prime = 31; int result = super.hashCode(); result = prime * result + ((displayname == null) ? 0 : displayname.hashCode()); result = prime * result + ((handlers == null) ? 0 : handlers.hashCode()); result = prime * result + ((jaxrpcmappingfile == null) ? 0 : jaxrpcmappingfile.hashCode()); result = prime * result + ((largeIcon == null) ? 0 : largeIcon.hashCode()); result = prime * result + ((serviceInterface == null) ? 0 : serviceInterface.hashCode()); result = prime * result + Arrays.hashCode(serviceqname); result = prime * result + ((smallIcon == null) ? 0 : smallIcon.hashCode()); result = prime * result + ((wsdlfile == null) ? 0 : wsdlfile.hashCode()); return result; } @Override public boolean equals(Object obj) { if (this == obj) { return true; } if (!super.equals(obj)) { return false; } if (getClass() != obj.getClass()) { return false; } ContextService other = (ContextService) obj; if (displayname == null) { if (other.displayname != null) { return false; } } else if (!displayname.equals(other.displayname)) { return false; } if (handlers == null) { if (other.handlers != null) { return false; } } else if (!handlers.equals(other.handlers)) { return false; } if (jaxrpcmappingfile == null) { if (other.jaxrpcmappingfile != null) { return false; } } else if (!jaxrpcmappingfile.equals(other.jaxrpcmappingfile)) { return false; } if (largeIcon == null) { if (other.largeIcon != null) { return false; } } else if (!largeIcon.equals(other.largeIcon)) { return false; } if (serviceInterface == null) { if (other.serviceInterface != null) { return false; } } else if (!serviceInterface.equals(other.serviceInterface)) { return false; } if (!Arrays.equals(serviceqname, other.serviceqname)) { return false; } if (smallIcon == null) { if (other.smallIcon != null) { return false; } } else if (!smallIcon.equals(other.smallIcon)) { return false; } if (wsdlfile == null) { if (other.wsdlfile != null) { return false; } } else if (!wsdlfile.equals(other.wsdlfile)) { return false; } return true; } }