Re: TemplateParser service override
Mats Andersson <[email protected]> Thu, 25 Apr 2019 15:28:32 +0200
| Newsgroups | gmane.comp.java.tapestry.user |
|---|---|
| Message-ID | <[email protected]> |
I think either of these should do it. First is overriding the existing
service, second is decorating it, having the option to forward the call
to the original
public static void
contributeServiceOverride(MappedConfiguration<Class,Object>
configuration, final Logger log)
{
configuration.add(TemplateParser.class, new TemplateParser() {
@Override
public ComponentTemplate parseTemplate(Resource resource) {
// Handle all parsing here
}
@Override
public Map<String, URL> getDTDURLMappings() {
// TODO
}
});
}
public TemplateParser decorateTemplateParser(TemplateParser original,
final Logger log) {
return new TemplateParser() {
@Override
public ComponentTemplate parseTemplate(Resource resource) {
// Handle parsing, or leave to the original below
return original.parseTemplate(resource);
}
@Override
public Map<String, URL> getDTDURLMappings() {
// Handle, or leave it to the original
return original.getDTDURLMappings();
}
};
}
// Mats
On 2019-04-25 15:14, Ric 2000 wrote:
> Hi,
> here is the stacktrace:
>
> Caused by: java.lang.IllegalStateException: Construction of service
> 'ServiceOverride' has failed due to recursion: the service depends on
> itself in some way. Please check
> org.apache.tapestry5.ioc.internal.services.ServiceOverrideImpl(Map) (at
> ServiceOverrideImpl.java:31) via
> org.apache.tapestry5.ioc.modules.TapestryIOCModule.bind(ServiceBinder) (at
> TapestryIOCModule.java:52) for references to another service that is itself
> dependent on service 'ServiceOverride'.
>
> at
> org.apache.tapestry5.ioc.internal.RecursiveServiceCreationCheckWrapper.createObject(RecursiveServiceCreationCheckWrapper.java:53)
>
> at
> org.apache.tapestry5.ioc.internal.OperationTrackingObjectCreator$1.invoke(OperationTrackingObjectCreator.java:47)
>
> at
> org.apache.tapestry5.ioc.internal.OperationTrackerImpl.invoke(OperationTrackerImpl.java:82)
>
> And this my override method in my filter module:
>
> @Contribute(ServiceOverride.class)
>
> public void contributeAliasOverrides(MappedConfiguration<Class<?>,
> Object> serviceOverrides, Map<String, URL> configuration,
>
> @Symbol(SymbolConstants.COMPRESS_WHITESPACE) boolean
> defaultCompressWhitespace, OperationTracker tracker) {
>
>
>
> serviceOverrides.add(TemplateParser.class,
>
> new MspTemplateParser(configuration,
> defaultCompressWhitespace, tracker));
>
> }
>
> Regards, Eric
>
> On Wednesday, April 24, 2019, Mats Andersson <[email protected]>
> wrote:
>> Hi Eric,
>>
>> What is the error you are getting? You should be able to either override
> or decorate the internal service. I guess it could be a problem with your
> implementation of the service, but hard to say without knowing.
>> Kind Regards
>> Mats
>>
>> On 2019-04-24 11:59, Ric 2000 wrote:
>>> Hi all,
>>>
>>> I'am new to that list, but not to Tapestry :-)
>>>
>>> Nevertheless I face problems to override one of the Tapestry 5.4.3
> internal
>>> services, the TemplateParser.
>>>
>>> The normal overriding with mapped config and override annotation leads to
>>> errors.
>>>
>>> Background is, that I want to use a customized SaxTemplateParser in order
>>> to use an own namespace.
>>> This is to be able to hide the Tapestry version info in the xsd
> declaration
>>> of our tml files.
>>>
>>> Can give me advice how to do it correctly?
>>>
>>> Thanks in advance.
>>>
>>> Kind Regards, Eric
>>>
>> --
>> ---------------------- Mats Andersson | Ronsoft AB | +46(0)73 368 79 82
>>
>>
--
---------------------- Mats Andersson | Ronsoft AB | +46(0)73 368 79 82
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]