#    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.

Import-Package:\
    !com.sun.*,\
    !javax.cache.*,\
    !javax.imageio.*,\
    !javax.json.*,\
    !javax.jws.*,\
    !javax.security.*,\
    !javax.servlet.*,\
    !javax.tools.*,\
    !javax.validation.*,\
    !javax.wsdl.*,\
    !net.sf.cglib.proxy.*,\
    !org.apache.abdera.*,\
    !org.apache.aries.*,\
    !org.apache.cxf.aegis.*,\
    !org.apache.log4j.*,\
    !org.apache.neethi.*,\
    !org.apache.velocity.*,\
    !org.apache.xerces.*,\
    !org.apache.xml.resolver.*,\
    !org.apache.xmlbeans.*,\
    !org.atmosphere.*,\
    !org.dom4j.*,\
    !org.junit.*,\
    !org.jvnet.fastinfoset.*,\
    !org.jvnet.staxex.*,\
    !org.ietf.jgss.*,\
    !org.objectweb.asm.*,\
    !org.osgi.service.blueprint.*,\
    !org.osgi.service.http,\
    !org.relaxng.datatype.*,\
    !org.slf4j.spi.*,\
    !org.springframework.*,\
    !org.codehaus.*,\
    *

-includeresource:\
	lib/component-dsl.jar=org.apache.aries.component-dsl.component-dsl-*.jar;lib:=true,\
	lib/cxf-rt-rs-extension-providers.jar=cxf-rt-rs-extension-providers-*.jar;lib:=true,\
	lib/cxf-rt-rs-json-basic.jar=cxf-rt-rs-json-basic-*.jar;lib:=true,\
	@jettison-*.jar
