Как я могу получить атрибут атрибута управления с помощью wso2 управления?
Ситуация такая: я определяю тип артефакта так:
<artifactType type="application/vnd.wso2-tets+xml" shortName="test" singularLabel="tests" pluralLabel="tests" hasNamespace="false" iconSet="9">
<storagePath>/applications/@{name}/@{overview_version}</storagePath>
<nameAttribute>overview_name</nameAttribute>
<ui>
<list>
<column name="Name">
<data type="path" value="overview_name" href="/applications/@{name}"/>
</column>
<column name="Version">
<data type="path" value="overview_version" href="@{storagePath}"/>
</column>
</list>
</ui>
<content>
<table name="Overview">
<field type="text" required="true">
<name>Name</name>
</field>
<field type="text" required="true">
<name>Version</name>
</field>
<field type="text-area">
<name>Description</name>
</field>
<field type="options">
<name label="Zcos">Zcos</name>
<values class="cn.oge.wso2.populator.AlgPopulator"/>
</field>
</table>
</content>
</artifactType>
В то же время я также определяю обработчик, mediaType - это "application/vnd.wso2-tets+xml" код обработчика, подобный этому:
public class XcosMediaTypeHandler extends Handler {
public Resource get(RequestContext requestContext) throws RegistryException {
return null;
}
public void put(RequestContext requestContext) throws RegistryException {
Resource resource = requestContext.getResource();
String name = "";
String version = "";
String description = "";
String zcos = "";
byte[] content = (byte[]) resource.getContent();
ByteArrayInputStream in = new ByteArrayInputStream(content);
OMElement docElement = null;
try {
StAXOMBuilder builder = new StAXOMBuilder(in);
docElement = builder.getDocumentElement();
} catch (Exception ae) {
throw new RegistryException(
"Failed to parse the propject proposal. "
+ "All project proposals should be in XML format.");
}
System.out.println("==========================================");
OMElement firstElement = docElement.getFirstElement();
System.out.println(firstElement);
Iterator<OMElement> ite = firstElement.getChildElements();
for (OMElement e = ite.next(); ite.hasNext(); e = ite.next()) {
if (e.getLocalName().equals("name")) {
name = e.getText();
} else if (e.getLocalName().equals("version")) {
version = e.getText();
} else if (e.getLocalName().equals("description")) {
description = e.getText();
} else if (e.getLocalName().equals("zcos")) {
zcos = e.getText();
}
}
System.out.println("Name:" + name);
System.out.println("Version:" + version);
System.out.println("Description:" + description);
System.out.println("zcos:" + zcos);
}
public void importResource(RequestContext requestContext)
throws RegistryException {
System.out.println("importResource");
}
public void delete(RequestContext requestContext) throws RegistryException {
}
public void putChild(RequestContext requestContext)
throws RegistryException {
System.out.println("putChild");
}
public void importChild(RequestContext requestContext)
throws RegistryException {
System.out.println("importChild");
}
}
Возникает вопрос: когда я использую интерфейс для добавления артефакта, например:
В приведенном выше коде я могу получить значение атрибута для имени, версии и описания. но я не могу получить значение атрибута для Zcos. В определении Артефакта Zos типа поля - это options, Другие атрибуты типа поля - текст или текстовая область. Почему я не могу получить стоимость недвижимости Zcos? Спасибо заранее!
1 ответ
Чтобы избежать путаницы, сделайте заполненную ссылку строчной, как показано ниже,
<field type="options">
<name label="Zcos">zcos</name>
<values class="cn.oge.wso2.populator.AlgPopulator"/>
</field>
найдите код ниже, чтобы получить значение zcos,
// Get the first OMElement child with name 'overview'
OMElement elementOverview = getFirstChild(docElement, "overview");
// Get the first OMElement child with name 'zcos' and appending absolute path prefix.
String zcos = getFirstChild(elementOverview, "zcos").getText();
Чтобы найти пример кода, пожалуйста, найдите этот пост в блоге.