I am running Tridion 2013sp1. I have a menu component on my site that is published using a rel template. It is shared with external applications as well as being used on the pages in our Tridion site. One of the requirements is that external links open in a new window/tab. When we publish our component it creates an XML of the links in the menu then parses them out for the menu. One peice of logic is behaving differently when called through the web service than it is on the page. When building the XML we add a target for external links.

Here is an example of the XML generated:

<siteMapNode type="additional" level="3" title="Additional Link (External)" url="https://www.google.com" target="_blank" />

When it comes to the target, it finds it in the web service and correctly assigns it properly, but when it is on a page it goes to the default. Here is the code that parses the target.

target="<c:choose><c:when test="thirdItem.target"><c:out value="thirdItem.target" /></c:when><c:otherwise>_top</c:otherwise></c:choose>"

Just to make things interesting, the URL for the link is generated the same way:

href="<c:choose><c:when test="thirdItem.url"><c:out value="thirdItem.url" /></c:when><c:otherwise>#</c:otherwise></c:choose>"

The URL works correctly every time.

This is not published to different publication targets, but the one publish makes it available to both my Tridion pages as well as through the web service. Has anyone seen anything like this before? Is there a difference in the engines that parse the Odata service vs the Tridion pages?

  • Although you state the URL for the link is generated the same way - have you confirmed that the .target isn't the culprit? (e.g. forcing the target based on the .url rather than the .target) May 20, 2015 at 22:28
  • 1
    Is there any difference in the caching between the odata service and the web application, are both correctly using the broker cache and cache channel service? May 21, 2015 at 7:54

1 Answer 1


I'm assuming your configuration is set to publish the menu component into the Broker DB (not the filesystem). In this case, try to inspect what value is returned when you do a simple ComponentPresentationAssembler.getContent(id, ctId) call in a rudimentary jsp to pull it out, and inspect/print the returned string to see if it matches the one coming out of the web service. I would expect it to be the same if the OData service is indeed pointing to the same Broker DB as the page.

If it's the same, then the culprit lies in your custom code, so look at the layers above Tridion. If it's not the same, then compare your site vs odata configurations: cd_storage_conf.xml and cd_deployer_conf.xml of both.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.