public class JXPathIndexedBeanWrapperImpl extends Object implements IndexedBeanWrapper
JavaBean、Map、DynaBeanからプロパティ名を指定することにより、 属性値を取得することができる。 属性が配列・List型の場合、該当する属性値を全て取得する。
Mapオブジェクト、またはMap型属性を使用する場合、 以下の文字はMapキーに使用できない。
以下のようなEmployeeオブジェクトのfirstName属性にアクセスする。
public class Employee {
private String firstName;
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public String getFirstName() {
return firstName;
}
}
1.コンストラクタでアクセス対象のJavaBeanをラップする。
// アクセス対象となるEmployeeオブジェクト
Employee emp = new Employee();
emp.setFirstName("めい");
IndexedBeanWrapper bw = new JXPathIndexedBeanWrapperImpl(emp);
2.firstName属性にアクセスする。 引数のStringには属性名を指定する。
Map<String, Object> map = bw.getIndexedPropertyValues("firstName");
キーがプロパティ名、値が属性値のMapインスタンスが返される。
以下のコードでは全ての要素をコンソールに出力している。
System.out.println("Mapのキー:Mapの値");
System.out.println("========================");
Set<String> keyset = map.keySet();
for (String key : keyset) {
System.out.print(key + ":");
System.out.println(map.get(key).toString());
}
結果は以下のように出力される。
Mapのキー:Mapの値 ======================== firstName:めい
以下のようなAddressオブジェクトの配列型属性numbersにアクセスする。
public class Address {
private int[] numbers;
public void setNumbers(int[] numbers) {
this.numbers = numbers;
}
public int[] getNumbers() {
return numbers;
}
}
1.コンストラクタでアクセス対象のJavaBeanをラップする。
// Employeeの属性となるAddressオブジェクト
Address address = new Address();
address.setNumbers(new int[]{1, 2, 3});
IndexedBeanWrapper bw = new JXPathIndexedBeanWrapperImpl(address);
2.numbers属性にアクセスする。 'numbers[]'のように配列記号を付ける必要はなく、 属性名を指定すればよいことに注意すること。
Map<String, Object> map = bw.getIndexedPropertyValues("numbers");
キーがプロパティ名、値が属性値のMapインスタンスが返される。
以下のコードでは全ての要素をコンソールに出力している。
System.out.println("Mapのキー:Mapの値");
System.out.println("========================");
Set<String> keyset = map.keySet();
for (String key : keyset) {
System.out.print(key + ":");
System.out.println(map.get(key).toString());
}
結果は以下のように出力される。
Mapのキー:Mapの値 ======================== numbers[0]:1 numbers[1]:2 numbers[2]:3List型のオブジェクトに対しても、同様の方法で値が取得できる。
下記のようなEmployeeオブジェクトから、 ネストされたAddressクラスのstreetNumber属性にアクセスする。
public class Employee {
private Address homeAddress;
public void setHomeAddress(Address homeAddress) {
this.homeAddress = homeAddress;
}
public Address getHomeAddress() {
return homeAddress;
}
}
public class Address {
private String streetNumber;
public void setStreetNumber(String streetNumber) {
this.streetNumber = streetNumber;
}
public String getStreetNumber() {
return streetNumber;
}
}
1.コンストラクタでアクセス対象のJavaBeanをラップする。
// Employeeの属性となるAddressオブジェクト
Address address = new Address();
address.setStreetNumber("住所");
// Employee
Employee emp = new Employee();
emp.setHomeAddress(address);
IndexedBeanWrapper bw = new JXPathIndexedBeanWrapperImpl(emp);
2.EmployeeオブジェクトのhomeAddress属性にネストされた、 streetNumber属性にアクセスする。 ネストした属性を指定する場合、以下のコードのように'.'(ドット)で 属性名を連結する。
Map<String, Object> map = bw.getIndexedPropertyValues("homeAddress.streetNumber");
キーがプロパティ名、値が属性値のMapインスタンスが返される。
以下のコードでは全ての要素をコンソールに出力している。
System.out.println("Mapのキー:Mapの値");
System.out.println("========================");
Set<String> keyset = map.keySet();
for (String key : keyset) {
System.out.print(key + ":");
System.out.println(map.get(key).toString());
}
結果は以下のように出力される。
Mapのキー:Mapの値 ======================== homeAddress.streetNumber:住所ネストした属性が配列・List型であっても、値を取得することができる。
下記のようなEmployeeオブジェクトのMap属性addressMapにアクセスする。
public class Employee {
private Map addressMap;
public void setAddressMap(Map addressMap) {
this.addressMap = addressMap;
}
public Map getAddressMap() {
return addressMap;
}
}
1.コンストラクタでアクセス対象のJavaBeanをラップする。
// Employeeの属性となるMap
Map addressMap = new HashMap();
addressMap.put("home", "address1");
// Employee
Employee emp = new Employee();
emp.setAddressMap(addressMap);
IndexedBeanWrapper bw = new JXPathIndexedBeanWrapperImpl(emp);
2.EmployeeのaddressMap属性中にセットしたhomeキーにアクセスする。 Map型属性のキーを指定する場合、以下のコードのようにかっこでキー名を連結する。
Map<String, Object> map = bw.getIndexedPropertyValues("addressMap(home)");
キーがプロパティ名、値が属性値のMapインスタンスが返される。
以下のコードでは全ての要素をコンソールに出力している。
System.out.println("Mapのキー:Mapの値");
System.out.println("========================");
Set<String> keyset = map.keySet();
for (String key : keyset) {
System.out.print(key + ":");
System.out.println(map.get(key).toString());
}
結果は以下のように出力される。
Mapのキー:Mapの値 ======================== addressMap(home):address1Map型属性のキー名は()(括弧)で囲われることに注意すること。
本クラスはJavaBeanだけではなく、Mapオブジェクトへのアクセスが可能である。
1.コンストラクタでアクセス対象のMapをラップする。
// Employeeの属性となるMap
Map addressMap = new HashMap();
addressMap.put("home", "address1");
IndexedBeanWrapper bw = new JXPathIndexedBeanWrapperImpl(addressMap);
2.addressMapにセットしたhomeキーにアクセスする。
Map<String, Object> map = bw.getIndexedPropertyValues("home");
キーがプロパティ名、値が属性値のMapインスタンスが返される。
以下のコードでは全ての要素をコンソールに出力している。
System.out.println("Mapのキー:Mapの値");
System.out.println("========================");
Set<String> keyset = map.keySet();
for (String key : keyset) {
System.out.print(key + ":");
System.out.println(map.get(key).toString());
}
結果は以下のように出力される。
Mapのキー:Mapの値 ======================== home:address1Mapオブジェクトに対しても、配列・List型属性、 ネストした属性の取得が可能である。
本クラスはJavaBeanだけではなく、DynaBeanへのアクセスが可能である。
1.コンストラクタでアクセス対象のDynaBeanをラップする。
// DynaBeanにラップされるJavaBean
Address address = new Address();
address.setStreetNumber("住所");
// DynaBean
DynaBean dynaBean = new WrapDynaBean(address);
IndexedBeanWrapper bw = new JXPathIndexedBeanWrapperImpl(dynaBean);
--------------------------------------------------------
上記のコードで使用しているAddressオブジェクトは以下のようなクラスである。
public class Address {
private String streetNumber;
public void setStreetNumber(String streetNumber) {
this.streetNumber = streetNumber;
}
public String getStreetNumber() {
return streetNumber;
}
}
2.DynaBeanのstreetNumber属性にアクセスする。
Map<String, Object> map = bw.getIndexedPropertyValues("streetNumber");
キーがプロパティ名、値が属性値のMapインスタンスが返される。
以下のコードでは全ての要素をコンソールに出力している。
System.out.println("Mapのキー:Mapの値");
System.out.println("========================");
Set<String> keyset = map.keySet();
for (String key : keyset) {
System.out.print(key + ":");
System.out.println(map.get(key).toString());
}
結果は以下のように出力される。
Mapのキー:Mapの値 ======================== streetNumber:住所
| 修飾子とタイプ | フィールドと説明 |
|---|---|
protected org.apache.commons.jxpath.JXPathContext |
context
JXPathコンテキスト。
|
| コンストラクタと説明 |
|---|
JXPathIndexedBeanWrapperImpl(Object target)
コンストラクタ。
|
| 修飾子とタイプ | メソッドと説明 |
|---|---|
protected String |
escapeMapProperty(String property)
MapプロパティをXPath形式にエスケープする。
|
protected String |
extractAttributeName(String node)
属性名を取り出す。
|
protected String |
extractDecrementIndex(String node)
デクリメントした添え字を取り出す。
|
protected String |
extractIncrementIndex(String property)
インクリメントされた添え字を取り出す。
|
protected String |
extractIncrementIndex(String property,
int increment)
インクリメントされた添え字を取り出す。
|
protected String |
extractIndex(String property)
配列インデックスを取得する。
|
protected String |
extractMapAttributeName(String node)
Mapの属性名を取り出す。
|
protected String |
extractMapKey(String node)
Mapキーを取り出す。
|
protected String |
extractMapPropertyKey(String property)
Map型属性のキー名を取り出す。
|
protected String |
extractMapPropertyName(String property)
Map型属性のプロパティ名を取り出す。
|
Map<String,Object> |
getIndexedPropertyValues(String propertyName)
指定したプロパティ名に一致する属性値を返す。
|
protected boolean |
isMapAttribute(String node)
Map属性を持つオブジェクトかどうか判断する。
|
protected boolean |
isMapObject(String node)
Mapオブジェクトかどうか判断する。
|
protected boolean |
isMapProperty(String property)
Map型属性かどうか判断する。
|
protected String |
toPropertyName(String xpath)
XPath形式の文字列をプロパティ形式の文字列に変換する。
|
protected String |
toXPath(String propertyName)
プロパティ形式の文字列をXPath形式の文字列に変換する。
|
public JXPathIndexedBeanWrapperImpl(Object target)
target - 対象のオブジェクトpublic Map<String,Object> getIndexedPropertyValues(String propertyName)
getIndexedPropertyValues インタフェース内 IndexedBeanWrapperpropertyName - プロパティ名protected String toXPath(String propertyName)
propertyName - プロパティ形式文字列protected String extractIncrementIndex(String property)
property - Javaプロパティ名。protected String extractIncrementIndex(String property, int increment)
property - プロパティ名。increment - インクリメントする値。protected String extractIndex(String property)
property - プロパティ名。protected String escapeMapProperty(String property)
property - Javaプロパティ名。protected String extractMapPropertyName(String property)
property - Javaプロパティ名。protected String extractMapPropertyKey(String property)
property - Javaプロパティ名。protected boolean isMapProperty(String property)
property - Javaプロパティ名。protected String toPropertyName(String xpath)
xpath - XPath形式文字列protected String extractAttributeName(String node)
node - XPathのノード。protected String extractMapAttributeName(String node)
node - XPathのノード。protected String extractMapKey(String node)
node - XPathのノード。protected String extractDecrementIndex(String node)
node - XPathのノード。protected boolean isMapAttribute(String node)
node - XPathのノード。protected boolean isMapObject(String node)
node - XPathのノード。Copyright © 2014. All Rights Reserved.