2012-06-25 25 views
7

मैं कई आईडीएल फाइलों के साथ एक बड़ी विरासत सी ++ कोड बेस के साथ काम कर रहा हूं जिसमें सभी प्रकार और स्थिरांक किसी मॉड्यूल के बाहर घोषित किए गए हैं।आईडीएल से जावा उत्पन्न करना (डिफ़ॉल्ट पैकेज से परहेज करना)

सी ++ के लिए, परिणामस्वरूप वैश्विक नामस्थान - कोड, लेकिन स्वीकार्य कोड उत्पन्न हो रहा है।

अब मैं कोर्बा के माध्यम से कनेक्ट करने के लिए जावा क्लाइंट जोड़ने की कोशिश कर रहा हूं। जावा के लिए, हालांकि, आईडीएल से उत्पन्न प्रकार (जावा के लिए सूर्य/ओरेकल आईडीएल कंपाइलर का उपयोग करके: idlj) जावा डिफ़ॉल्ट पैकेज में हैं क्योंकि वे आईडीएल मॉड्यूल में नहीं हैं। इसका परिणाम जावा संकलन त्रुटियों में होता है, क्योंकि डिफ़ॉल्ट पैकेज से आयात करना अवैध है।

मैं समस्या को ठीक करने का सबसे आसान तरीका ढूंढ रहा हूं। सभी प्रकार आसपास

  1. प्लेस एक मॉड्यूल घोषणा:

    मैं निम्नलिखित पर विचार किया है। मैं वर्तमान में इस समाधान पर काम कर रहा हूं, लेकिन यह बहुत दर्दनाक है, प्रभावित प्रकारों की संख्या और बड़ी विरासत सी ++ कोडबेस पर प्रभाव के आधार पर।

  2. -pkgPrefix या -pkgTranslate विकल्प का उपयोग करें। अब तक, मैं यह समझ नहीं सकता कि इसे सामान्य रूप से कैसे पूरा किया जाए, क्योंकि आपको से अनुवाद करने के लिए एक मॉड्यूल निर्दिष्ट करना होगा या उपसर्ग से जोड़ने के लिए एक प्रकार निर्दिष्ट करना होगा। -pkgPrefix का उपयोग किसी विशिष्ट प्रकार के लिए किया जा सकता है, लेकिन हमारे पास सैकड़ों प्रकार हैं और मैं विशेष रूप से प्रत्येक संकलित फ़ाइल के लिए एक -pkgPrefix विकल्प सूचीबद्ध नहीं करता हूं ...
  3. प्रज्ञा निर्देश का उपयोग करें? मुझे उपयोग करने के बारे में पता नहीं है, लेकिन उम्मीद है कि एक गुरु मार्ग को इंगित कर सकता है?
  4. ????

मुझे यह विश्वास करना मुश्किल लगता है कि आईडीएल को जावा पैकेज में होने के लिए मजबूर करने का कोई आसान तरीका नहीं है यदि मौजूदा मॉड्यूल में सभी प्रकार नहीं हैं। मुझे उम्मीद है कि मैं बस स्पष्ट याद कर रहा हूँ!

संपादित:

  • आईडीएल-टू-जावा कम्पाइलर idlj है।
  • नीचे जोड़ा गया उदाहरण जोड़ा गया।
  • अपडेट किया गया आइटम # 2 (ऊपर) स्पष्ट करने के लिए कि प्रत्येक प्रकार के लिए -pkgPrefix का उपयोग कर संभव नहीं है

उदाहरण (जब तक यह यथोचित पटकथा जा सकता है?):


Foo.idl

struct Foo 
{ 
    . 
    . 
    . 
} 

फू।जावा: (ध्यान दें कि कोई पैकेज निर्दिष्ट किया जाता है, डिफ़ॉल्ट पैकेज अर्थ):

public final class Foo implements org.omg.CORBA.portable.IDLEntity 
{ 
    . 
    . 
    . 
} 

ClassUsesFoo.java:

package com.sigh; 

import Foo; // <-- this is an error 
public class ClassUsesFoo 
{ 
    private Foo f; 
}; 
+2

प्रश्न: आईडीएल से जावा उत्पन्न करने के लिए आप किस टूल का उपयोग कर रहे हैं? मानक सूर्य "idlj"? क्या आप 1 का एक विशिष्ट उदाहरण दे सकते हैं) आपकी कमांड लाइन ("-pkgPrefix" के साथ) और 2) परिणामस्वरूप जावा (यह काम नहीं कर रहा है)? – paulsm4

उत्तर

2

आप विकल्पों pkgPrefix और pkgTranslate साथ खेल सकते हैं संकेत के रूप में a french site में मुझे लगता है कि आपके पास वह हिस्सा सही था लेकिन मैं बस मामले में विस्तार से था।

उदाहरण:

interface T1 
{ 
}; 
interface T2 
{ 
}; 

आप बाहर फ़ाइल idl.config

PkgPrefix.T1=aaa 
PkgPrefix.T2=bbb 

में pkgPrefix विन्यास निम्न आदेश

idlj -td dir T.idl 

(मौजूदा) निर्देशिका निर्देशिका में फाइल बनाता है:

dir/ 
├── aaa 
│   ├── T1Helper.java 
│   ├── T1Holder.java 
│   ├── T1.java 
│   ├── T1Operations.java 
│   └── _T1Stub.java 
└── bbb 
    ├── T2Helper.java 
    ├── T2Holder.java 
    ├── T2.java 
    ├── T2Operations.java 
    └── _T2Stub.java 

कॉन्फ़िगरेशन फ़ाइल बनाने के लिए, आप grep/awk/sed/cut के संयोजन का उपयोग कर सकते हैं।