जवाब को Java कॉलआउट की मदद से अपरकेस में बदलें

आपको Apigee Edge का दस्तावेज़ दिख रहा है.
Apigee X के दस्तावेज़ पर जाएं.
जानकारी

अगर आपको पहली बार Java कॉलआउट आज़माना है, तो हमारा सुझाव है कि आप Java कॉलआउट बनाने का तरीका लेख से शुरुआत करें.

इस कुकबुक के सैंपल में, JavaCallout नीति बनाने का तरीका बताया गया है. यह नीति, प्रॉक्सी फ़्लो के कॉन्टेक्स्ट में कस्टम Java कोड को लागू करती है.

सैंपल कोड क्या करता है?

इस सैंपल में मौजूद एपीआई प्रॉक्सी, टारगेट सेवा को कॉल करती है. यह सेवा, सामान्य JSON रिस्पॉन्स दिखाती है. Java Callout नीति को टारगेट रिस्पॉन्स फ़्लो पर लागू किया जाता है. Java कोड, जवाब के हेडर और कॉन्टेंट को कैपिटल लेटर में बदलता है. यह एक सामान्य उदाहरण है. हालांकि, इससे पता चलता है कि Edge पर एपीआई प्रॉक्सी के संदर्भ में, कस्टम Java कोड को कैसे काम करने के लिए सेट अप किया जाता है.

सैंपल आज़माएं

प्रोजेक्ट डाउनलोड करना

इसे आसान बनाने के लिए, GitHub पर Apigee api-platform-samples रिपॉज़िटरी से इस प्रोजेक्ट को डाउनलोड किया जा सकता है.

  1. अपने सिस्टम पर api-platform-samples को डाउनलोड या क्लोन करें.
  2. अपनी पसंद के टर्मिनल या कोड एडिटर में, api-platform-samples/doc-samples/java-cookbook प्रोजेक्ट पर जाएं.

Maven की मदद से कोड कंपाइल करना

प्रोजेक्ट को इस तरह से सेट अप किया जाता है कि Maven के साथ कंपाइल किया जा सके. अगर आपको javac का इस्तेमाल करना है, तो हम Maven के उदाहरण के साथ-साथ इसका भी एक उदाहरण शामिल करेंगे.

  1. पक्का करें कि आपने Maven इंस्टॉल किया हो:
    mvn -version
  2. स्क्रिप्ट java-cookbook/buildsetup.sh को लागू करें. यह स्क्रिप्ट, आपकी लोकल Maven repo में ज़रूरी JAR डिपेंडेंसी इंस्टॉल करती है.
  3. java-cookbool/callout डायरेक्ट्री पर जाएं.
  4. Maven को लागू करें:
    mvn clean package
  5. अगर आपको लगता है, तो पुष्टि करें कि JAR फ़ाइल edge-custom-policy-java-cookbook.jar को java-cookbook/apiproxy/resources/java में कॉपी किया गया है. यह JAR फ़ाइलों के लिए ज़रूरी जगह है. इन फ़ाइलों को प्रॉक्सी के साथ डिप्लॉय किया जाता है.

javac की मदद से कंपाइल करना

अगर आपको कोड को कंपाइल करने के लिए javac का इस्तेमाल करना है, तो java-cookbook डायरेक्ट्री में जाकर, यहां दिए गए तरीके का इस्तेमाल करें. ज़रूरी JAR फ़ाइलें, आपको java-cookbook/lib डायरेक्ट्री में मिलेंगी.

  1. cd को api-platform-samples/doc-samples/java-cookbook पर सेट करें.
  2. पक्का करें कि आपके पाथ में javac मौजूद हो.

    javac -version
  3. यहां दी गई javac कमांड चलाएं:

    javac -d . -classpath ./lib/expressions-1.0.0.jar:./lib/message-flow-1.0.0.jar:. callout/src/main/java/ResponseUppercase.java
  4. JAR फ़ाइल को apiproxy/resources/java डायरेक्ट्री में कॉपी करें. यह JAR फ़ाइलों के लिए ज़रूरी जगह है. इन फ़ाइलों को प्रॉक्सी के साथ डिप्लॉय किया जाता है.

    cp com/apigeesample/ResponseUppercase.class apiproxy/resources/java

प्रॉक्सी को डिप्लॉय करना और कॉल करना

./java-cookbook डायरेक्ट्री में डिप्लॉय स्क्रिप्ट दी गई है. हालांकि, इसे चलाने से पहले आपको इसे सेट अप करना होगा.

  1. cd api-platform-samples/doc-samples/java-cookbook पर सेट करें
  2. अगर आपने अब तक ऐसा नहीं किया है, तो फ़ाइल ../../setup/setenv.sh खोलें और उसमें बदलाव करें. इसके लिए, Apigee खाते की जानकारी का इस्तेमाल करें. जैसे, आपका उपयोगकर्ता नाम (आपके खाते से जुड़ा ईमेल पता), आपके संगठन का नाम, और एपीआई मैनेजमेंट कॉल करने के लिए इस्तेमाल किया जाने वाला डोमेन. उदाहरण के लिए, Edge क्लाउड के लिए डोमेन https://api.enterprise.apigee.com है. हालांकि, अगर Edge Private Cloud का इस्तेमाल किया जा रहा है, तो आपका डोमेन अलग हो सकता है.
  3. setenv.sh फ़ाइल सेव करें.
  4. डिप्लॉय स्क्रिप्ट को एक्ज़ीक्यूट करें:
    ./deploy.sh
  5. अगर डिप्लॉयमेंट पूरा हो जाता है, तो invoke स्क्रिप्ट को एक्ज़ीक्यूट करें:
    ./invoke.sh

    invoke स्क्रिप्ट, cURL कमांड को कॉल करती है. यह कमांड ऐसी दिखती है:

    curl  http://$org-$env.$api_domain/java-cookbook/json

जवाब कुछ ऐसा दिखेगा:

< HTTP/1.1 200 OK
< Date: Tue, 09 May 2017 20:31:08 GMT
< Content-Type: APPLICATION/JSON; CHARSET=UTF-8
< Content-Length: 68
< Connection: keep-alive
< Access-Control-Allow-Origin: *
< ETag: W/"44-RA5ERT/MMLIK54NVBWBSZG"
< X-Powered-By: APIGEE
< Server: Apigee Router
<
* Curl_http_done: called premature == 0
* Connection #0 to host willwitman-test.apigee.net left intact
{"FIRSTNAME":"JOHN","LASTNAME":"DOE","CITY":"SAN JOSE","STATE":"CA"}

प्रॉक्सी फ़्लो

यह ट्रेस टूल का एक शॉट है. इसमें प्रॉक्सी का फ़्लो दिखाया गया है:

प्रॉक्सी स्ट्रक्चर

यह प्रॉक्सी का स्ट्रक्चर है. ध्यान दें कि इसमें apiproxy/resources/java डायरेक्ट्री में एक JAR फ़ाइल शामिल होती है. JAR फ़ाइल ज़रूरी है. हम इसे सैंपल के तौर पर उपलब्ध कराते हैं. हालांकि, अगर आपको कस्टम काम करना है, तो आपको इसे खुद बनाना होगा और इस जगह पर कॉपी करना होगा. Java कॉलआउट को कंपाइल और डिप्लॉय करने के बारे में जानकारी के लिए, Java कॉलआउट बनाने का तरीका देखें.

java-cookbook

    apiproxy
        java-cookbook.xml
    policies
        responseUppercase.xml
    proxies
        default.xml
    resources
        java
            ResponseUppercase.jar
    targets
        default.xml

Java कोड के बारे में जानकारी

Java Callout नीति, यहां दिया गया Java कोड चलाती है. यह कोड, जवाब के हेडर और मुख्य हिस्से को कैपिटल लेटर में बदलता है. ध्यान दें कि यह प्रोग्राम, Apigee के खास पैकेज का इस्तेमाल करता है. इन पैकेज में ऐसे ऑब्जेक्ट और तरीके शामिल होते हैं जिनका इस्तेमाल करके, प्रॉक्सी फ़्लो के साथ सीधे तौर पर इंटरैक्ट किया जा सकता है. ऐसे तरीके मौजूद हैं जिनकी मदद से, फ़्लो वैरिएबल, हेडर, मैसेज का कॉन्टेंट वगैरह को सेट और ऐक्सेस किया जा सकता है.

package com.apigeesample;

import com.apigee.flow.execution.ExecutionContext;
import com.apigee.flow.execution.ExecutionResult;
import com.apigee.flow.execution.spi.Execution;
import com.apigee.flow.message.MessageContext;

import java.util.Set; 

public class ResponseUppercase implements Execution{
    public ExecutionResult execute(MessageContext messageContext, ExecutionContext executionContext) {
        try {
            Set headers = messageContext.getMessage().getHeaderNames();
            for (String header : headers) {
                String h = messageContext.getMessage().getHeader(header).toUpperCase();
                messageContext.getMessage().setHeader(header, h);
            }
            String content = messageContext.getMessage().getContent();
            messageContext.getMessage().setContent(content.toUpperCase());
            return ExecutionResult.SUCCESS;
        } catch (Exception e) {
                return ExecutionResult.ABORT;
        }
    }
}

सैंपल प्रॉक्सी की जांच करना

हम आपको प्रॉक्सी खोलने और फ़ाइलों की जांच करने का विकल्प देते हैं. Java Callout नीति यहां दी गई है. ध्यान दें कि यह उस क्लास और JAR फ़ाइल को कैसे रेफ़रंस करता है जिसे कॉलआउट लागू करता है. Java कॉलआउट की सभी नीतियां, इस पैटर्न का पालन करती हैं. Java कॉलआउट से जुड़ी नीति भी देखें.

<JavaCallout name="responseUppercase">         
    <ClassName>com.apigeesample.ResponseUppercase</ClassName>         
    <ResourceURL>java://ResponseUppercase.jar</ResourceURL> 
</JavaCallout>