I figured it out but the documentation wasnt a lot of help. It appears that the EndpointReferenceDomainExpression is being compared to the address configured in the jaxrs-endpoint and not what is in the wsdl. This makes PERFECT sense but as all the example configuration contained the complete url (including protocol and port: e.g. http://localhost:8080/user-servic/userService) i wrongly presumed that it was either reading the address from the actual request and comparing it to the expression or reading it from the configured wsdl address.
So when a configuration looks like this: <jaxws:endpoint id="userService" implementor="com.healthmedia.ws.wsdl.user.v1.UserServiceImpl" address="/userService"> <jaxws:properties> <entry key="ws-security.ut.validator" value-ref="validator" /> </jaxws:properties> </jaxws:endpoint> The policy expression should reflect the address above like so: <?xml version="1.0" encoding="UTF-8" ?> <attachments xmlns:wsp="http://www.w3.org/ns/ws-policy" xmlns:wsa="http://www.w3.org/2005/08/addressing" xmlns:i18np="http://www.w3.org/2008/04/ws-i18np" xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy"> <wsp:PolicyAttachment> <wsp:AppliesTo> <wsa:EndpointReference> <wsa:Address>/userService</wsa:Address> </wsa:EndpointReference> </wsp:AppliesTo> <wsp:Policy> <wsp:ExactlyOne> <wsp:All> <wsp:Policy> <i18np:i18n Optional="false" /> </wsp:Policy> </wsp:All> </wsp:ExactlyOne> </wsp:Policy> </wsp:PolicyAttachment> </attachments> Thanks for the help. This was tremendously frustrating to figure out. Thank god for debuggers! -Mike On Thu, Jul 3, 2014 at 7:37 AM, Lambert, Michael <[email protected] > wrote: > Sorry Andrei, > > I didnt think you were going to respond so i moved forward with a solution > using another technique. I would like to solve this issue however so i > created a branch with the problem: > > > https://github.com/MacFlecknoe/service-repository-sample/blob/policy-attachement-problem/schema/src/main/resources/policy/authentication-policy.xml > https://github.com/MacFlecknoe/service-repository-sample/blob/ > policy-attachement-problem > /schema/src/main/resources/service/user-soap-v1.wsdl > <https://github.com/MacFlecknoe/service-repository-sample/blob/master/schema/src/main/resources/service/user-soap-v1.wsdl> > https://github.com/MacFlecknoe/service-repository-sample/blob/ > <https://github.com/MacFlecknoe/service-repository-sample/blob/master/user/service/src/main/webapp/WEB-INF/beans.xml> > policy-attachement-problem > <https://github.com/MacFlecknoe/service-repository-sample/blob/master/schema/src/main/resources/service/user-soap-v1.wsdl> > /user/service/src/main/webapp/WEB-INF/beans.xml > > Could you take another quick peek? Again, the problem is that the policy > is being completely ignored. The address i have it configured for is both > reflected in the wsdl and in reality when I start my server. > > Also, is there a way to configure the address in the policy so that is > dynamic? I am not sure what the end address of the service is going to be > once its deployed (e.g. its domain will likely change). > > Thanks, > > Mike > > > On Thu, Jul 3, 2014 at 4:38 AM, Andrei Shakirin <[email protected]> > wrote: > >> Hi, >> >> I am bit confused: don't see policy attachments in your configuration, >> you attach policies direct to endpoint: >> >> <jaxws:features> >> <bean class="org.apache.cxf.feature.LoggingFeature"/> >> <p:policies> >> <!-- we attach policies via spring as there are issues leveraging >> external policy attachments when using PolicyAttachement with cxf 2.*--> >> <wsp:PolicyReference >> URI="classpath:policy/authentication-policy.xml" /> >> <wsp:PolicyReference URI="classpath:policy/i18n-policy.xml" /> >> </p:policies> >> </jaxws:features> >> >> To use policy attachments you need something like: >> >> <cxf:bus> >> <cxf:features> >> <p:policies/> >> </cxf:features> >> </cxf:bus> >> >> <p:externalAttachment location="${temp.location}/addr-external.xml"/> >> >> Where addr-external.xml is policy attachment: >> >> <attachments xmlns:wsp="http://www.w3.org/ns/ws-policy" xmlns:wsa=" >> http://www.w3.org/2005/08/addressing"> >> <wsp:PolicyAttachment> >> <wsp:AppliesTo> >> <wsa:EndpointReference> >> <wsa:Address> >> http://localhost:9020/SoapContext/GreeterPort</wsa:Address> >> </wsa:EndpointReference> >> </wsp:AppliesTo> >> <wsp:Policy> >> <wsp:ExactlyOne> >> <wsp:All> >> <wsam:Addressing xmlns:wsam=" >> http://www.w3.org/2007/02/addressing/metadata"> >> <wsp:Policy/> >> </wsam:Addressing> >> </wsp:All> >> </wsp:ExactlyOne> >> </wsp:Policy> >> </wsp:PolicyAttachment> >> </attachments> >> >> I propose that you look into working policy attachments CXF system tests >> and find the difference with your code. >> If that doesn't help, please create a small distilled sample with simple >> policy (for example WS-Addressing) to illustrate your problem, I will look >> into it. >> >> Regards, >> Andrei. >> >> > -----Original Message----- >> > From: Lambert, Michael [mailto:[email protected]] >> > Sent: Mittwoch, 2. Juli 2014 15:25 >> > To: [email protected] >> > Subject: Re: policy attachment >> > >> > Thats part of the problem Andrei. I have followed the examples and its >> just not >> > working for me. Can you take a look at my policy file and wsdl and see >> if >> > anything obvious sticks out as wrong? >> > >> > https://github.com/MacFlecknoe/service-repository- >> > sample/blob/master/schema/src/main/resources/policy/authentication- >> > policy.xml >> > https://github.com/MacFlecknoe/service-repository- >> > sample/blob/master/schema/src/main/resources/service/user-soap-v1.wsdl >> > >> > Here is how I have it configured: >> > https://github.com/MacFlecknoe/service-repository- >> > sample/blob/master/user/service/src/main/webapp/WEB-INF/beans.xml >> > >> > It only works when I embed the policy in the wsdl file itself. The >> external >> > attachment file loads but doesnt trigger the ws-security policy to fire. >> > >> > -Mike >> > >> > >> > On Wed, Jul 2, 2014 at 8:27 AM, Andrei Shakirin <[email protected]> >> > wrote: >> > >> > > Hi, >> > > >> > > > -----Original Message----- >> > > > From: Lambert, Michael [mailto:[email protected]] >> > > > Sent: Mittwoch, 2. Juli 2014 14:05 >> > > > To: [email protected] >> > > > Subject: RE: policy attachment >> > > > >> > > > Thanks Andrei! That helps a lot... I'll try your suggestion and let >> > > > you >> > > know how it >> > > > goes. >> > > > >> > > >> > > OK. >> > > >> > > > Any insight as to why I can't get end point references to work? Is >> > > > there >> > > a trick to >> > > > configuring it? I followed the example on the samples but can't seem >> > > > to >> > > get it >> > > > to work with my wsdl. Does the end point need to match what is in >> > > > the >> > > wsdl or >> > > > what cxf generates the address to be when it starts? Any >> > > > documentation surrounding this? >> > > >> > > This construction should work by default, if endpoint address matches >> > > to your service: >> > > >> > > <attachments xmlns:wsp="http://www.w3.org/ns/ws-policy" xmlns:wsa=" >> > > http://www.w3.org/2005/08/addressing"> >> > > <wsp:PolicyAttachment> >> > > <wsp:AppliesTo> >> > > <wsa:EndpointReference> >> > > >> > > <wsa:Address>http://localhost:9020/SoapContext/GreeterPort >> > > </wsa:Address> >> > > </wsa:EndpointReference> >> > > </wsp:AppliesTo> >> > > <wsp:Policy> >> > > <wsp:ExactlyOne> >> > > <wsp:All> >> > > <wsam:Addressing xmlns:wsam=" >> > > http://www.w3.org/2007/02/addressing/metadata"> >> > > <wsp:Policy/> >> > > </wsam:Addressing> >> > > </wsp:All> >> > > </wsp:ExactlyOne> >> > > </wsp:Policy> >> > > </wsp:PolicyAttachment> >> > > </attachments> >> > > >> > > For details, look into addr-external.xml and AddressingPolicyTest.java >> > > in >> > > systests/ws-specs: >> > > >> > > >> https://git-wip-us.apache.org/repos/asf?p=cxf.git;a=tree;f=systests/ws >> > > -specs/src/test/java/org/apache/cxf/systest/ws/policy;h=5e6323442952eb >> > > 619300582a2ced25cf861f6118;hb=HEAD >> > > >> > > Regards, >> > > Andrei. >> > > >> > > >> > > > >> > > > Thanks much! >> > > > On Jul 2, 2014 3:19 AM, "Andrei Shakirin" <[email protected]> >> wrote: >> > > > >> > > > > Hi, >> > > > > >> > > > > If you use CXF >= 3.0.0, 2.7.12, >> > > > > you should register >> > > > > org.apache.cxf.ws.policy.attachment.external.URIDomainExpressionBu >> > > > > ilde >> > > > > r as bus extension. >> > > > > It supports all policy attachment URL syntaxes (except extension). >> > > > > >> > > > > By default CXF registers the >> > > > > org.apache.cxf.ws.policy.attachment.external.EndpointReferenceDoma >> > > > > inEx pressionBuilder supporting only wsa:EndpointReference. >> > > > > >> > > > > See https://issues.apache.org/jira/browse/CXF-5685 for details. >> > > > > >> > > > > Either add following string into META-INF/cxf/bus-extensions.txt: >> > > > > >> > > > > org.apache.cxf.ws.policy.attachment.external.URIDomainExpressionBu >> > > > > ilde r::true or add bean in Spring/Blueprint context with >> > > > > URIDomainExpressionBuilder type. >> > > > > >> > > > > System test registering URIDomainExpressionBuilder: >> > > > > >> https://git-wip-us.apache.org/repos/asf?p=cxf.git;a=blob;f=systest >> > > > > s/ws >> > > > > -specs/src/test/java/org/apache/cxf/systest/ws/policy/AddressingPo >> > > > > licy >> > > > > >> > > > >> > ExternalAttachmentWsdl11Test.java;h=d44ee8decf628a57edbf402bc6d8ff0c >> > > > 00 >> > > > > 42b649;hb=HEAD >> > > > > . >> > > > > >> > > > > If you use CXF version < 3.0.0, 2.7.12, just copy the classes >> > > > > URIDomainExpressionBuilder.java, URIDomainExpression.java and >> > > > > register URIDomainExpressionBuilder as bus extension. >> > > > > >> > > > > Let me know if it works as expected. >> > > > > >> > > > > Regards, >> > > > > Andrei. >> > > > > >> > > > > > -----Original Message----- >> > > > > > From: Lambert, Michael [mailto:[email protected]] >> > > > > > Sent: Mittwoch, 2. Juli 2014 08:13 >> > > > > > To: [email protected] >> > > > > > Subject: policy attachment >> > > > > > >> > > > > > I feel awful for asking so many questions but googling hasnt >> > > > > > been >> > > > > helpful. >> > > > > > >> > > > > > I am attempting to attach an external security policy to an >> > > > > > endpoint >> > > > > with no >> > > > > > success. When I attempt to use a wsp:UI in the AppliesTo element >> > > > > > cxf >> > > > > blows up. >> > > > > > Here is the contents of the file: >> > > > > > >> > > > > > ---- >> > > > > > <?xml version="1.0" encoding="UTF-8" ?> <attachments >> > > > > > xmlns:wsp="http://www.w3.org/ns/ws-policy" >> > > > > > xmlns:wsa="http://www.w3.org/2005/08/addressing" >> > > > > > xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy >> "> >> > > > > > <wsp:PolicyAttachment> >> > > > > > <wsp:AppliesTo> >> > > > > > <wsp:URI> >> > > > > > >> > > > > >> http://cxf.apache.org/testutils/wsdl/greeter_control.wsdl#wsdl.por >> > > > > t(Gr >> > > > > eeterSer >> > > > > > vice/GreeterPort) >> > > > > > </wsp:URI> >> > > > > > </wsp:AppliesTo> >> > > > > > <wsp:Policy> >> > > > > > <wsp:ExactlyOne> >> > > > > > <wsp:All> >> > > > > > <wsp:Policy> >> > > > > > <sp:UsernameToken sp:IncludeToken=" >> > > > > > >> > > > > >> http://schemas.xmlsoap.org/ws/2005/07/securitypolicy/IncludeToken/ >> > > > > Alwa >> > > > > ysTo >> > > > > > Recipient >> > > > > > "> >> > > > > > <wsp:Policy> >> > > > > > <sp:WssUsernameToken10 /> >> > > > > > </wsp:Policy> >> > > > > > </sp:UsernameToken> >> > > > > > </wsp:Policy> >> > > > > > </wsp:All> >> > > > > > </wsp:ExactlyOne> >> > > > > > </wsp:Policy> >> > > > > > </wsp:PolicyAttachment> >> > > > > > </attachments> >> > > > > > >> > > > > > ---- >> > > > > > And here is the error: >> > > > > > ---- >> > > > > > Caused by: javax.xml.ws.WebServiceException: >> > > > > > org.apache.cxf.ws.policy.PolicyException: >> > > > > > NO_DOMAINEXPRESSIONBUILDER_EXC >> > > > > > ---- >> > > > > > It appears that the wsp:URI element passed into >> > > > > > DomainExpressionBuilderRegistry.build(Element element) has null >> > > > > > contents >> > > > > for >> > > > > > a reason that I cannot figure out. I have tried different >> > > > > > syntaxes and >> > > > > URLs to try >> > > > > > to get it to work and its always null. >> > > > > > >> > > > > > Putting an EndpointReference in the AppliesTo element doesnt >> error: >> > > > > > >> > > > > > <wsa:EndpointReference><wsa:Address>http://localhost:8080/user- >> > > > > > service/userService</wsa:Address> >> > > > > > </wsa:EndpointReference> >> > > > > > >> > > > > > But it doesnt work either. It never seems to intercept calls to >> > > > > > the >> > > > > service hosted >> > > > > > at the configured URL. The ONLY way I have able to get it to >> > > > > > work is by embedding the policy in the wsdl. I dont want to do >> > > > > > that however as I >> > > > > want a >> > > > > > mediator to handle the policy and would like the contract >> > > > > > policies to >> > > > > configured >> > > > > > differently in different environments. >> > > > > > >> > > > > > >> > > > > > Any help would be appreciated. I am tearing my hair out over >> > > > > > this. I >> > > > > cant be the >> > > > > > only one attempting to do this. >> > > > > > >> > > > > > The code is on github: >> > > > > > >> > > > > > https://github.com/MacFlecknoe/service-repository- >> > > > > > sample/blob/master/schema/src/main/resources/policy/authenticati >> > > > > > on- >> > > > > > policy.xml >> > > > > > >> > > > > > Thanks. >> > > > > > >> > > > > > Mike >> > > > > >> > > >> > >
