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

# Implementation classes for the transformers
org.apache.tuscany.sca.databinding.json2x.JSON2XMLStreamReader;source=JSON2x,target=javax.xml.stream.XMLStreamReader,weight=5000
org.apache.tuscany.sca.databinding.json2x.XMLStreamReader2JSON;source=javax.xml.stream.XMLStreamReader,target=JSON2x,weight=5000,public=false
org.apache.tuscany.sca.databinding.json2x.jackson.Object2JSON;source=java:complexType,target=JSON2x,weight=90000,public=true
org.apache.tuscany.sca.databinding.json2x.jackson.Object2JSON;source=java:simpleType,target=JSON2x,weight=90000,public=false
org.apache.tuscany.sca.databinding.json2x.axiom.JSON2OMElement;source=JSON2x,target=org.apache.axiom.om.OMElement,weight=500
org.apache.tuscany.sca.databinding.json2x.jackson.Object2JSON;source=java:array,target=JSON2x,weight=90000,public=false
org.apache.tuscany.sca.databinding.json2x.jackson.Object2JSON;source=commonj.sdo.DataObject,target=JSON2x,weight=90000,public=false
org.apache.tuscany.sca.databinding.json2x.jackson.Object2JSON;source=javax.xml.bind.JAXBElement,target=JSON2x,weight=90000,public=false
org.apache.tuscany.sca.databinding.json2x.jackson.JSON2Object;source=JSON2x,target=java:complexType,weight=90000,public=false
org.apache.tuscany.sca.databinding.json2x.jackson.JSON2Object;source=JSON2x,target=java:simpleType,weight=90000,public=false
org.apache.tuscany.sca.databinding.json2x.jackson.JSON2Object;source=JSON2x,target=commonj.sdo.DataObject,weight=90000,public=false
org.apache.tuscany.sca.databinding.json2x.jackson.JSON2Object;source=JSON2x,target=javax.xml.bind.JAXBElement,weight=90000,public=false
org.apache.tuscany.sca.databinding.json2x.jackson.JSON2Object;source=JSON2x,target=java:array,weight=90000,public=false

org.apache.tuscany.sca.databinding.json2x.jackson.InputStream2JSON;source=application/json#java.io.InputStream;target=JSON2x,weight=50,public=true

