我有一個Java類(更準確地說是一個jpa實體),我想在PHP中「解析」。我想獲得該類的字段,與每個字段關聯的註釋等。用於Java類/代碼的PHP解析器?
是否有任何PHP工具可以讀取java源代碼並「解析」它?我想避免用我自己的自定義正則表達式重新創建輪...
我有一個Java類(更準確地說是一個jpa實體),我想在PHP中「解析」。我想獲得該類的字段,與每個字段關聯的註釋等。用於Java類/代碼的PHP解析器?
是否有任何PHP工具可以讀取java源代碼並「解析」它?我想避免用我自己的自定義正則表達式重新創建輪...
我會建議編寫一個小的Java應用程序,它編譯/加載目標Java文件,最後返回/打印例如通過調用Java內省API生成的JSON數據。
這可能可能會幫助或提供有用的類:Introspection Tool for the Java(TM) Platform 1.0
雖然它並不提供了一個類的簽名容易可讀表示,Java's XMLEncoder提供了一個JavaBean的像這樣的XML表示:
<?xml version="1.0" encoding="UTF-8"?>
<java version="1.0" class="java.beans.XMLDecoder">
<object class="javax.swing.JFrame">
<void property="name">
<string>frame1</string>
</void>
<void property="bounds">
<object class="java.awt.Rectangle">
<int>0</int>
<int>0</int>
<int>200</int>
<int>200</int>
</object>
</void>
<void property="contentPane">
<void method="add">
<object class="javax.swing.JButton">
<void property="label">
<string>Hello</string>
</void>
</object>
</void>
</void>
<void property="visible">
<boolean>true</boolean>
</void>
</object>
</java>
此外,我建議看看這個page,這解釋了Java's refelection API。
截至本文檔,一個非常簡單的Java程序:
import java.lang.reflect.*;
public class DumpMethods {
public static void main(String args[])
{
try {
// @see Hint from Nicolas Bousquet below
Class c = Class.forName(args[0], false, this.getClass().getClassLoader());
Method m[] = c.getDeclaredMethods();
for (int i = 0; i < m.length; i++)
System.out.println(m[i].toString());
}
catch (Throwable e) {
System.err.println(e);
}
}
}
適用於Java的Stack類這樣
java DumpMethods java.util.Stack
產生這樣的文本輸出:
public java.lang.Object java.util.Stack.push(
java.lang.Object)
public synchronized
java.lang.Object java.util.Stack.pop()
public synchronized
java.lang.Object java.util.Stack.peek()
public boolean java.util.Stack.empty()
public synchronized
int java.util.Stack.search(java.lang.Object
)
任何分析Java源代碼或(更復雜的)Java字節碼的努力都比使用Java來檢查Java要複雜幾倍。
此外,如果Java源代碼或類文件的語法稍後以某種方式更改,PHP解決方案甚至可能會失敗。因此,從架構的角度來看,使用PHP來實現所需的功能,與風格差距並不遙遠。
因此,我想知道,有人曾試圖 - 因爲Java的選擇是直截了當,乾淨的。
這是一個黑客,我想避免如果我能爲我的目的獲得一個PHP工具。也許我沒有使用正確的措辭,我想要的不是解析器,而是其他的東西。 – AlfaTeK 2011-04-27 14:04:41
嗯,在我看來,這不是破解,而是解決問題的標準方法。我明白,你想獲得所有可訪問類的簽名。你不是嗎?我覺得,爲JAVA類文件編寫解析器是一個更大的努力。但我可能是錯的,因爲你不需要解析所有的JAVA,但只能解析頂級方法。 Hm ... – SteAp 2011-04-27 18:25:56
@AlfaTeK在PHP中解析Java比提議的解決方案更「瘋狂」; Java已經理解Java,PHP需要被教授。如果你需要Java的幫助來做到這一點,我相信SO上的某個人會有所幫助。 – 2011-05-07 18:29:03
我使用PHP/Java橋
這似乎是連接php和java服務器的方式,這不是我想要的。我想要一個可以讀取.java源代碼並「解析」它的php工具,可以使用getallmethods,getallfields等很好的方法,就像一個dom遍歷庫。 – AlfaTeK 2011-04-27 14:05:45
最巧妙的解決方法是調用javadoc with a custom doclet,因爲這並不需要你想文檔中的Java源的任何編譯。要將它與PHP集成,只需通過exec()調用javadoc即可。
如果您希望我爲您制定實施方案,請提供更多詳細信息,說明您希望如何通過edit訪問PHP中的信息(例如解析文本說明,數組等)。
ANTLR(http://www.antlr.org/)可能很適合。您可以將它與Java語法規範(http://www.antlr.org/grammar/list)一起使用,以獲取Java代碼文件的語法樹。環顧Java語法,我看到了諸如methodDeclaration,fieldDeclaration和classDeclaration之類的東西 - 聽起來就像你正在尋找的東西。 快速谷歌搜索爲ANTLR啓動了一個PHP運行時,儘管該網站聲稱是新的,可能「破損」傾向。
有趣。不知道,ANTLR輸出可能由非Java /外部運行時執行。 – SteAp 2011-05-10 22:18:48
谷歌的第一個結果:http://freshmeat.net/projects/java2php/ – hsz 2011-04-26 18:27:48
除了破壞下載鏈接似乎是一個工具來轉換Java源代碼到PHP,這是不是我想要的。我只想讀取.java文件,解析它,然後訪問它的結構,如getAllMethods getAllFields等(與DOM解析器類似) – AlfaTeK 2011-04-26 18:32:13
您似乎對使用java庫的建議解決方案感到不滿。請問爲什麼?或者更多的interresting,能夠解析JPA實體的目的是什麼?根據實際需要,首選解決方案可能會改變。 – 2011-05-09 11:19:03