/*
 * Copyright 2001-2010 The Apache Software Foundation.
 * 
 * Licensed 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.juddi.v3.annotations;

import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;

@Retention(RetentionPolicy.RUNTIME)
public @interface UDDIServiceBinding {
	
	/** name which can be referenced by TModelInstanceRegistration, this key is not send
	 * down to the UDDI Registry. */
    public String bindingKey() default "";
	/** Description of the ServiceBinding. */
    public String description();
    /** AccessPoint Type, which could be one of endPoint, wsdlDeployment, bindingTemplate, hostingDirector */
	public String accessPointType() default "wsdlDeployment";
	/** The URL of the accessPoint. */
	public String accessPoint() default "";
	/** Language code i.e.: en, fr, nl. */
	public String lang() default "en";
	/** Comma separated list of tModel Keys */
	public String tModelKeys() default "";
	/** List of KeyedReferences */
	public String categoryBag() default "";
}
