JavaCallout politikası

Apigee Edge belgelerini görüntülüyorsunuz.
Apigee X belgelerine gidin.
info

Ne?

Apigee politikaları tarafından kullanıma hazır olarak sunulmayan özel davranışları uygulamak için Java'yı kullanmanızı sağlar. Java kodunuzda, ileti özelliklerine (üstbilgiler, sorgu parametreleri, içerik) ve proxy akışındaki akış değişkenlerine erişebilirsiniz. Bu politikayı kullanmaya yeni başlıyorsanız Java çağrısı oluşturma başlıklı makaleyi inceleyin.

Desteklenen Java sürümleri için Desteklenen yazılımlar ve desteklenen sürümler başlıklı makaleyi inceleyin.

Zaman

Kurallar için Java çağrısı oluşturma başlıklı makaledeki "Ne zaman Java çağrısı kullanmalıyım?" bölümünü inceleyin.

Hakkında

Java Callout politikası, akış değişkenlerini almanıza ve ayarlamanıza, özel mantık yürütmenize ve hata işlemeyi gerçekleştirmenize, isteklerden veya yanıtlardan veri ayıklamanıza ve daha fazlasına olanak tanır. Bu politika, diğer standart Edge politikaları kapsamında olmayan özel davranışlar uygulamanıza olanak tanır.

Java uygulamanızı ihtiyacınız olan tüm paket JAR dosyalarıyla paketleyebilirsiniz. Java Callout ile yapabileceklerinizle ilgili bazı kısıtlamalar olduğunu unutmayın. Bunlar Kısıtlamalar bölümünde listelenmiştir.

Örnekler

Java çağrısı oluşturma

Politikanın <Property> öğesi, Java kodunuzda çalışma zamanında alabileceğiniz bir ad/değer çifti belirtmenize olanak tanır. Özelliklerin kullanıldığı çalışan bir örnek için Java çağrısında özellikleri kullanma başlıklı makaleyi inceleyin.

Java kodundan özelliğe erişmek için kullanılacak adı belirtmek üzere <Property> öğesinin name özelliğini kullanın. <Property> öğesinin değeri (açılış ve kapanış etiketleri arasındaki değer), Java kodu tarafından alınacak değerdir. Değer bir dize olmalıdır. Değeri almak için akış değişkenine referans veremezsiniz.

  • Mülkü yapılandırın. Burada özellik değeri, değişken adıdır response.status.code.
    <JavaCallout async="false" continueOnError="false" enabled="true" name="JavaCallout">
        <DisplayName>JavaCallout</DisplayName>
        <ClassName>com.example.mypolicy.MyJavaCallout</ClassName>
        <ResourceURL>java://MyJavaCallout.jar</ResourceURL>
        <Properties>
            <Property name="source">response.status.code</Property>
        </Properties>
    </Javascript>
  • Java kodunuzda, Execution sınıfı uygulamasında aşağıdaki oluşturucuyu şu şekilde uygulayın: implementation as follows:
    public class MyJavaCallout implements Execution{
        public MyJavaCallout(Map<string, string> props){
    
                // Extract property values from map.
        }
        ...
    }

Java kodunuzda mesaj bağlamındaki (akış değişkenleri) değişkenlerin nasıl ayarlanacağıyla ilgili net bir açıklama için bu Apigee Topluluğu gönderisine bakın.


Öğe referansı

Öğe referansı, JavaCallout politikasının öğelerini ve özelliklerini açıklar.

<JavaCallout name="MyJavaCalloutPolicy">
   <ClassName>com.example.mypolicy.MyJavaCallout</ClassName>
   <ResourceURL>java://MyJavaCallout.jar</ResourceURL>
</JavaCallout>

<JavaCallout> özellikleri

<JavaCallout name="MyJavaCalloutPolicy" enabled="true" continueOnError="false" async="false" >

Aşağıdaki tabloda tüm politika üst öğelerinde ortak olan özellikler açıklanmaktadır:

Özellik Açıklama Varsayılan Varlık
name

Politikanın dahili adı. name özelliğinin değeri Harf, sayı, boşluk, kısa çizgi, alt çizgi ve nokta içermelidir. Bu değer, 255 karakteri aşmalıdır.

İsteğe bağlı olarak, politikayı<DisplayName> yönetim arayüzü proxy düzenleyicisinde farklı bir doğal dil adı kullanabilir.

Yok Zorunlu
continueOnError

Bir politika başarısız olduğunda hata döndürmesi için false olarak ayarlayın. Bu beklenen bir durumdur çoğu politika için geçerli olur.

Akış yürütmenin bir politikadan sonra bile devam etmesi için true olarak ayarlayın başarısız olur.

false İsteğe bağlı
enabled

Politikayı uygulamak için true olarak ayarlayın.

Politikayı devre dışı bırakmak için false değerine ayarlayın. Bu politika, bir akışa bağlı kalsa bile uygulanır.

true İsteğe bağlı
async

Bu özelliğin desteği sonlandırıldı.

false Kullanımdan kaldırıldı

&lt;DisplayName&gt; öğe

Politikayı name özelliğine ek olarak farklı bir doğal dil adına sahip yönetim arayüzü proxy düzenleyicisi.

<DisplayName>Policy Display Name</DisplayName>
Varsayılan

Yok

Bu öğeyi çıkarırsanız politikanın name özelliğinin değeri: kullanılır.

Varlık İsteğe bağlı
Tür Dize

<ClassName> öğesi

Java Callout politikası çalıştırıldığında yürütülen Java sınıfının adını belirtir. Sınıf, <ResourceURL> ile belirtilen JAR dosyasına dahil edilmelidir. Ayrıca Java çağrısı oluşturma başlıklı makaleye de göz atın.

<JavaCallout name="MyJavaCalloutPolicy">
   <ResourceURL>java://MyJavaCallout.jar</ResourceURL>
   <ClassName>com.example.mypolicy.MyJavaCallout</ClassName>
</JavaCallout>
Varsayılan: Yok
Mevcut olma: Zorunlu
Tür: Dize

<Property> öğesi

Çalışma zamanında Java kodundan erişebileceğiniz bir özelliği belirtir. Her özellik için değişmez bir dize değeri belirtmeniz gerekir. Bu öğede akış değişkenlerine referans veremezsiniz. Özelliklerin kullanıldığı çalışan bir örnek için Java çağrısında özellikleri kullanma başlıklı makaleyi inceleyin.

<Properties>
    <Property name="propName">propertyValue</Property>
</Properties>
Varsayılan: Yok
Mevcut olma: İsteğe bağlı
Tür: Dize

Özellikler

Özellik Açıklama Varsayılan Varlık
ad

Tesisin adını belirtir.

Yok Zorunlu.

<ResourceURL> öğesi

Bu öğe, Java çağrı politikası çalıştırıldığında yürütülecek Java JAR dosyasını belirtir.

Bu dosyayı, API proxy paketindeki /apiproxy/resources/java altında veya API proxy düzenleyicisinin Gezgin bölmesindeki Komut Dosyaları bölümünde API proxy kapsamına kaydedebilir ya da Kaynak dosyaları bölümünde açıklandığı gibi birden fazla API proxy'sinde yeniden kullanmak için kuruluş veya ortam kapsamlarına kaydedebilirsiniz.

<JavaCallout name="MyJavaCalloutPolicy">
   <ResourceURL>java://MyJavaCallout.jar</ResourceURL>
   <ClassName>com.example.mypolicy.MyJavaCallout</ClassName>
</JavaCallout>
Varsayılan: Yok
Mevcut olma: Zorunlu
Tür: Dize

Hata referansı

Bu bölümde, bu politika bir hatayı tetiklediğinde döndürülen hata kodları ve hata mesajlarının yanı sıra Edge tarafından ayarlanan hata değişkenleri açıklanmaktadır. Hata kuralları geliştirirken bu bilgilerin farkında olmanız önemlidir. hoşuma gitmesi için bir fırsattır. Daha fazla bilgi için Bilmeniz gerekenler Politika hataları ve Kullanım sorun.

Çalışma zamanı hataları

Bu hatalar, politika yürütüldüğünde ortaya çıkabilir.

Hata kodu HTTP durumu Neden Düzelt
steps.javacallout.ExecutionError 500 Java kodu bir istisna oluşturduğunda veya JavaScript çağrısı politikası yürütülürken null döndürdüğünde ortaya çıkar.

Dağıtım hataları

Politikayı içeren proxy dağıtıldığında bu hatalar oluşabilir.

Hata adı Hata dizesi HTTP durumu Şu durumda gerçekleşir:
ResourceDoesNotExist Resource with name [name] and type [type] does not exist Yok <ResourceURL> öğesinde belirtilen dosya mevcut değil.
JavaCalloutInstantiationFailed Failed to instantiate the JavaCallout Class [classname] Yok <ClassName> öğesinde belirtilen sınıf dosyası jar.
IncompatibleJavaVersion Failed to load java class [classname] definition due to - [reason] Yok Hata dizesini inceleyin. Ayrıca bkz. Desteklenenler yazılım ve desteklenen sürümler hakkında daha fazla bilgi edinin.
JavaClassNotFoundInJavaResource Failed to find the ClassName in java resource [jar_name] - [class_name] Yok Hata dizesini inceleyin.
JavaClassDefinitionNotFound Failed to load java class [class_name] definition due to - [reason] Yok Hata dizesini inceleyin.
NoAppropriateConstructor No appropriate constructor found in JavaCallout class [class_name] Yok Hata dizesini inceleyin.
NoResourceForURL Could not locate a resource with URL [string] Yok Hata dizesini inceleyin.

Hata değişkenleri

Bu değişkenler, politika bir hatayı tetiklediğinde ayarlanır. Daha fazla bilgi için Bilmeniz gerekenler hakkında daha fazla bilgi edinin.

Değişkenler Konum Örnek
fault.name="fault_name" fault_name, yukarıdaki Çalışma zamanı hataları tablosunda listelendiği gibi hatanın adıdır. Hata adı, hata kodunun son kısmıdır. fault.name Matches "ExecutionError"
javacallout.policy_name.failed policy_name, hataya neden olan politikanın kullanıcı tarafından belirtilen adıdır. javacallout.JC-GetUserData.failed = true

Örnek hata yanıtı

{  
   "fault":{  
      "faultstring":"Failed to execute JavaCallout. [policy_name]",
      "detail":{  
         "errorcode":"javacallout.ExecutionError"
      }
   }
}

Örnek hata kuralı

<FaultRule name="JavaCalloutFailed">
    <Step>
        <Name>AM-JavaCalloutError</Name>
    </Step>
    <Condition>(fault.name Matches "ExecutionError") </Condition>
</FaultRule>

Şemalar

Derleme ve dağıtım

Özel Java kodunuzu derleme ve proxy ile dağıtma hakkında ayrıntılı bilgi için Java çağrısı oluşturma başlıklı makaleyi inceleyin.

Kısıtlamalar

Aşağıda, Java Callout'ları yazarken dikkate almanız gereken kısıtlamalar verilmiştir:

  • Çoğu sistem çağrısına izin verilmez. Örneğin, dahili dosya sisteminde okuma veya yazma işlemleri yapamazsınız.
  • Soketler aracılığıyla ağa erişim. Apigee, sitelocal, anylocal, loopback ve linklocal adreslerine erişimi kısıtlar.
  • Açıklama metni, mevcut işlem, işlem listesi veya makinedeki CPU/bellek kullanımı hakkında bilgi alamaz. Bu tür aramaların bazıları işlevsel olsa da desteklenmez ve herhangi bir zamanda etkin olarak devre dışı bırakılabilir. İleriye dönük uyumluluk için kodunuzda bu tür çağrılar yapmaktan kaçınmalısınız.
  • Apigee Edge ile birlikte gelen Java kitaplıklarının kullanılması desteklenmez. Bu kitaplıklar yalnızca Edge ürün işlevselliği içindir ve bir kitaplığın sürümden sürüme kullanılabileceği garanti edilmez.
  • Java'da açıklama metinlerinde paket adı olarak io.apigee veya com.apigee kullanmayın. Bu adlar ayrılmıştır ve diğer Apigee modülleri tarafından kullanılır.

Sunum

JAR dosyasını bir API proxy'sinde /resources/java altına yerleştirin. Java Callout'unuz bağımsız JAR dosyaları olarak paketlenmiş ek üçüncü taraf kitaplıklarına bağlıysa bu JAR dosyalarını çalışma zamanında doğru şekilde yüklendiklerinden emin olmak için /resources/java dizinine de yerleştirin.

Proxy'yi oluşturmak veya değiştirmek için yönetim kullanıcı arayüzünü kullanıyorsanız yeni bir kaynak ekleyin ve ek bir bağımlı JAR dosyası belirtin. Birden fazla JAR varsa bunları ek kaynak olarak eklemeniz yeterlidir. Ek JAR dosyalarına başvurmak için politika yapılandırmasını değiştirmeniz gerekmez. Bu öğeleri /resources/java içine yerleştirmeniz yeterlidir.

Java JAR'larını yükleme hakkında bilgi edinmek için Kaynak dosyaları başlıklı makaleyi inceleyin.

Maven veya javac kullanarak Java çağrısının nasıl paketlenip dağıtılacağını gösteren ayrıntılı bir örnek için Java çağrısı oluşturma başlıklı makaleye bakın.

Javadoc

Java çağrı kodu yazmak için Javadoc'u GitHub'da buradan inceleyebilirsiniz. HTML'yi sisteminize klonlamanız veya indirmeniz ve ardından index.html dosyasını bir tarayıcıda açmanız yeterlidir.

Kullanım notları

  • Java Callout politikası gerçek kod içermez. Bunun yerine, Java Callout politikası bir Java "kaynağına" referans verir ve Java kodunun yürütüldüğü API akışındaki adımı tanımlar. Java JAR'ınızı Yönetim kullanıcı arayüzü proxy düzenleyicisi aracılığıyla yükleyebilir veya yerel olarak geliştirdiğiniz API proxy'lerinde /resources/java dizinine ekleyebilirsiniz.
  • Uzak hizmetlere yapılan API çağrıları gibi basit işlemler için ServiceCallout politikasını kullanmanızı öneririz. Hizmet açıklama metni politikasına bakın.
  • HTTP üst bilgilerini, parametreleri veya ileti içeriğini değiştirme ya da çıkarma gibi ileti içeriğiyle ilgili nispeten basit etkileşimler için Apigee, JavaScript politikası kullanılmasını önerir.

İlgili konular