<?xml version="1.0" encoding="ISO-8859-1"?>

<!--
  ~ 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.
  -->

<!DOCTYPE ProviderConfig
    PUBLIC "-//Sun Microsystems, Inc.//DTD JAXM Provider//EN"
    "http://java.sun.com/xml/dtds/jaxm_provider_1_0.dtd">

<ProviderConfig>
  <Profile profileId="ebxml">
    <Transport>
      <Protocol>
          http
      </Protocol>

      <Endpoint>
	  <URI>
	     http://www.wombats.com/remote/sender
	  </URI>
	  <URL>
	     http://127.0.0.1:8081/jaxm-provider/receiver/ebxml
	  </URL>
      </Endpoint>

     <ErrorHandling>
        <Retry>
           <MaxRetries>
		5
       	   </MaxRetries>
  	   <RetryInterval>
		2000
	   </RetryInterval>
        </Retry>
    </ErrorHandling>

    <Persistence>
      <Directory>
         ebxml/
      </Directory>
      <RecordsPerFile>
           10
      </RecordsPerFile>
    </Persistence>
    </Transport>

    <Transport>
      <Protocol>
          https
      </Protocol>

      <Endpoint>
	  <URI>
	     jaxm.dummy.uri
	  </URI>
	  <URL>
	     https://127.0.0.1:8443/jaxm/dummy/
	  </URL>
      </Endpoint>

    <Persistence>
      <Directory>
         ebxml-https/
      </Directory>
      <RecordsPerFile>
           10
      </RecordsPerFile>
    </Persistence>

    </Transport>
  </Profile>

  <Profile profileId="soaprp">
    <Transport>
      <Protocol>
          http
      </Protocol>

      <Endpoint>
	  <URI>
	     http://www.wombats.com/soaprp/sender
	  </URI>
	  <URL>
	     http://127.0.0.1:8081/jaxm-provider/receiver/soaprp
	  </URL>
      </Endpoint>

     <ErrorHandling>
        <Retry>
           <MaxRetries>
		3
       	   </MaxRetries>
  	   <RetryInterval>
		2000
	   </RetryInterval>
        </Retry>
    </ErrorHandling>

      <Persistence>
        <Directory>
           soaprp/
        </Directory>
        <RecordsPerFile>
            20
        </RecordsPerFile>
      </Persistence>
    </Transport>

    <Transport>
      <Protocol>
          https
      </Protocol>

    <Endpoint>
	  <URI>
	     jaxm.dummy.uri
	  </URI>
	  <URL>
	     https://127.0.0.1:8443/jaxm/dummy
	  </URL>
      </Endpoint>
    </Transport>
  </Profile>

     <ErrorHandling>
        <Retry>
           <MaxRetries>
		3
       	   </MaxRetries>
  	   <RetryInterval>
		2000
	   </RetryInterval>
        </Retry>
    </ErrorHandling>

    <Persistence>
      <Directory>
         tempdir/
      </Directory>
      <RecordsPerFile>
           11
      </RecordsPerFile>
    </Persistence>
</ProviderConfig>
