On Oct 8, 2008, at 5:16 PM, Sergey Beryozkin wrote:

Hi

I agree with what Dan suggested - logging a message in a
PolicyVerificationOutInterceptor should suffice in most cases. Few more
comments.

I think that asserting a policy on the outbound path makes sense only if a specification for a given policy expression explicitly states that it
applies to both inbound and outbound paths or to outbound path only.

Suppose you have this config:

<jaxws:endpoint ...>
<jaxws:features>
<cxf:PolicyFeature>
  <wsp:Policy><foo:Bar/></wsp:Policy>
</cxf:PolicyFeature>
</jaxws:features>
</jaxws:endpoint>

Does <foo:Bar> apply to the inbound our outbound path? Or both? What are the semantics here?

on the
server inbound path, a union of all policy expressions is selected as at any moment of time we may need to satisfy requests from clients meeting either
all or one of the available alternatives.
All required interceptors are
installed - but the api allows for on-demand interceptors installation (for
ex, based in the in message's content & headers).

Correct. Or more appropriately, based on the actual content of the policy.

AFAIK,
PolicyVerificationInInterceptor would say OK as long as at least one of the alternatives is fully satisfied. In your example we have a compact policy expression, so there'no problems if either <foo:Bar/> or <gnu:Gnat/> has
been asserted.

On the outbound path only the alternative which has been selected during the inbound path should be optionally verified. I don't think any alternative selection algorithm should apply on the outbound path as we already have an
alternative active in the scope of a given operation.

That assumes the effective policy is the same on the inbound and outbound sides. I think that's an invalid assumption (as I think you are saying, as well). Or at least I think we should be able to discriminate between inbound and outbound policies. I stand corrected in the case of WSDL, but I think we need a way to make the same distinction in spring (and however else we retrieve policy).

How about this, for a proposal:

<jaxws:endpoint ...>
<jaxws:features>

<cxf:PolicyFeature>
  <wsp:Policy><foo:Bar/></wsp:Policy>
</cxf:PolicyFeature>

<cxf:InboundPolicyFeature>             <!-- new type -->
  <wsp:Policy><gnu:Gnat/></wsp:Policy>
</cxf:InboundPolicyFeature>

<cxf:OutboundPolicyFeature>             <!-- new type -->
  <wsp:Policy><bling:Blang/></wsp:Policy>
</cxf:OutboundPolicyFeature>

</jaxws:features>
</jaxws:endpoint>

So on the inbound side you'd get [{foo}Bar, {gnu:Gnat}]

And on the outbound side you'd get [{foo:Bar}, {gnu}Gnat]

If we have the Ex2
(above) then this alternative will simply have no any inbound behaviors to engage (see more below). In Ex1 - it's up to that specific policy's out
interceptors to do any additional outbound work.

Thus, in many cases, like in Ex1, if no explicit out policy interceptors have been provided then PolicyVerificationOutInterceptor should simply log a (FINE?) level message as suggested. In fact it's not clear what else it can
do other than do this logging on the server side.

I think this gets us over a hump, but I also think it's kind of a cop- out. Why log anything? Why even do the check? What's the purpose, if there's no tangible side-effect? Choke up a log with more garbage?



While (on the server side) PolicyVerificationInInterceptor is useful in that it ensures that at least one alternative has been met, its out counterpart
is of little use. Unless we provide some hints.

Yup.  If it's of no use, remove it.



We can introduce additional optional hints (in the form of policy
attributes) to both in/out verifiers that this policy only applies to the in or out path or to both paths. Thus, in case of Ex2, In verifier won't fail but Out verifier can log a WARNING (or throw a fault if its phase can be
changed). Likewise, in Ex3, In verifier may throw exception while OUT
verifier will keep quiet. In case of Ex1, both in/out verifiers may report
failures (through exceptions or logging).

Not sure what you mean here. Attributes on the wsp:Policy elements, themselves? I'd think there'd be a better way to do that, than to add proprietary stuff to standard policy expressions. At any rate, if that's what you mean, then I think we should try to avoid it, since it won't be in any way interoperable.



Without such helper attributes the default (server) behavior should likely
be :
- PolicyVerificationInInterceptor throws fault if none of the alternatives
has been met (as it is now)
- PolicyVerificationOutInterceptor logs a FINE message if not all of the expressions in the alternative selected during the inbound invocation has
been met.

Why? What possible use is this to the user? The more I think of it, the more I realize the PolicyVerificationOutInterceptor on the outbound server side is kind of pointless, especially in light of the current bug in its behavior.

I'll reiterate that the API on setting a PolicyAlternativeSelector is too coarse -- it's on the PolicyEngine, which is basically in 1-1 correspondence with the Bus. I can think of 4 different ways you'd want to configure one of these guys (client/server in/out), and you'd want to be able to configure that on a per-endpoint basis (at least).

-Fred

Reply via email to