On 2013/3/26 20:56, morfeus929 wrote:
My code is :
URL baseURL = new
URL("http://localhost:8080/guvnor-5.5.0.Final-tomcat-6.0/");
URL url = new URL(baseURL, "rest/packages/mortgages/assets/bobik");
HttpURLConnection connection = (HttpURLConnection)url.openConnection();
connection.setRequestProperty("Authorization",
"Basic " + new Base64().encodeToString((
"admin:admin".getBytes() )));
connection.setRequestMethod("GET");
connection.setRequestProperty("Accept", MediaType.APPLICATION_XML);
connection.connect();
assertEquals (200, connection.getResponseCode());
BufferedReader br = new BufferedReader(new
InputStreamReader(connection.getInputStream()));
JAXBContext context = JAXBContext.newInstance(Asset.class);
Unmarshaller un = context.createUnmarshaller();
Asset a = (Asset) un.unmarshal(br);
a.setDescription("An updated description HH");
a.getMetadata().setDisabled(false);
a.getMetadata().setVersionNumber(2);
System.out.println(a.getMetadata().isDisabled());
System.out.println(a.getMetadata().getVersionNumber());
connection.disconnect();
HttpURLConnection conn2 = (HttpURLConnection)url.openConnection();
conn2.setRequestProperty("Authorization",
"Basic " + new Base64().encodeToString((
"admin:admin".getBytes() )));
Marshaller ma = context.createMarshaller();
conn2.setRequestMethod("PUT");
conn2.setRequestProperty("Content-Type", MediaType.APPLICATION_XML);
conn2.setRequestProperty("Content-Length",
Integer.toString(a.toString().getBytes().length));
conn2.setUseCaches (false);
conn2.setDoInput(true);
conn2.setDoOutput(true);
ma.marshal(a, conn2.getOutputStream());
assertEquals (200, connection.getResponseCode());
conn2.disconnect();
so you are trying to update asset metadata
"disabled" and
"versionNumber" through REST API?
I am afraid "versionNumber" is a read-only property, it is controlled by
JCR version system, it is changed when you check in an asset. You dont
set this version number directly.
On the other updating "disabled " through REST api is not supported in
5.5. Please raise a jira if you wish this is added in the future releases.
BTW, you can take a look into source, then you can understand which
metadata property is supported and which is not:
Below is code snippet copied from
https://github.com/droolsjbpm/guvnor/blob/5.5.x/guvnor-webapp-core/src/ma...
@PUT
@Path("{packageName}/assets/{assetName}")
@Consumes(MediaType.APPLICATION_ATOM_XML)
public void updateAssetFromAtom(@PathParam("packageName") String
packageName, @PathParam("assetName") String assetName, Entry assetEntry) {
try {
AtomAssetMetadata assetMetadata =
assetEntry.getAnyOtherJAXBObject(AtomAssetMetadata.class);
//Throws RulesRepositoryException if the package or asset
does not exist
AssetItem ai =
rulesRepository.loadModule(packageName).loadAsset(assetName);
//Update asset
ai.checkout();
ai.updateTitle(assetEntry.getTitle());
ai.updateDescription(assetEntry.getSummary());
if (assetMetadata.getFormat() != null) {
ai.updateFormat(assetMetadata.getFormat());
}
//REVISIT: What if the client really wants to set content
to ""?
if (assetEntry.getContent().getText() != null &&
!"".equals(assetEntry.getContent().getText())) {
ai.updateContent(assetEntry.getContent().getText());
}
if (assetMetadata.getCategories() != null &&
assetMetadata.getCategories().length > 0) {
ai.updateCategoryList(assetMetadata.getCategories());
}
if (assetMetadata.getState() != null) {
ai.updateState(assetMetadata.getState());
}
ai.updateValid(assetValidator.validate(ai));
if (AssetFormats.affectsBinaryUpToDate(ai.getFormat())) {
ModuleItem pkg = ai.getModule();
pkg.updateBinaryUpToDate(false);
RuleBaseCache.getInstance().remove(pkg.getUUID());
}
ai.checkin("Check-in (summary): " + assetEntry.getSummary());
rulesRepository.save();
} catch (JAXBException e) {
throw new WebApplicationException(e);
} catch (RuntimeException e) {
throw new WebApplicationException(e);
}
}
@PUT
@Path("{packageName}/assets/{assetName}")
@Consumes({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML})
public void updateAssetFromJAXB(
@PathParam("packageName") String packageName,
@PathParam("assetName") String assetName, Asset asset) {
try {
//Throws RulesRepositoryException if the package or asset
does not exist
AssetItem ai =
rulesRepository.loadModule(packageName).loadAsset(assetName);
/* Update asset */
ai.checkout();
ai.updateTitle(asset.getTitle());
ai.updateDescription(asset.getDescription());
ai.updateValid(assetValidator.validate(ai));
if (AssetFormats.affectsBinaryUpToDate(ai.getFormat())) {
ModuleItem pkg = ai.getModule();
pkg.updateBinaryUpToDate(false);
RuleBaseCache.getInstance().remove(pkg.getUUID());
}
ai.checkin(asset.getMetadata().getCheckInComment());
rulesRepository.save();
} catch (RuntimeException e) {
throw new WebApplicationException(e);
}
}
As you can see, only title, description, checkinComment are supported if
you use application/xml content type. if you use Atom, there are more
supported attributes, include: title, description, checkinComment,
format, state, categories.
Cheers,
Jervis
The problem i have is metadata of the rule does'nt get changed. I tried
almost everything. Description of the rule is changed, published date is
changed but metadata not. Why is that? What do i do wrong?
--
View this message in context:
http://drools.46999.n3.nabble.com/rules-users-Changing-asset-metadata-pro...
Sent from the Drools: User forum mailing list archive at
Nabble.com.
_______________________________________________
rules-users mailing list
rules-users(a)lists.jboss.org
https://lists.jboss.org/mailman/listinfo/rules-users