<!--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. -->
	
<xb:config  xmlns:xb="http://www.bea.com/2002/09/xbean/config">
    
    <xb:namespace uri="http://schemas.ggf.org/jsdl/2005/11/jsdl">
        <xb:package>org.ogf.schemas.jsdl</xb:package>
    </xb:namespace>
    
    <xb:namespace uri="http://schemas.ggf.org/jsdl/2005/11/jsdl-posix">
        <xb:package>org.ogf.schemas.jsdl.posix</xb:package>
    </xb:namespace>
    
    <xb:namespace uri="http://schemas.ogf.org/jsdl/2007/02/jsdl-spmd">
        <xb:package>org.ogf.schemas.jsdl.spmd</xb:package>
    </xb:namespace>
  
    <xb:namespace uri="http://schemas.ggf.org/jsdl/2006/07/jsdl-hpcpa">
        <xb:package>org.ogf.schemas.jsdl.hpcpa</xb:package>
    </xb:namespace>
      
</xb:config>