Hi everybody,
Sorry for resurrecting an old thread but I didn't have a workaround so
far and I was bitten again by this issue.
The problem is that looks impossible to configure that limit through the
spring configuration. The documentation in
http://cxf.apache.org/docs/security.html#Security-XML is not working for
me because I am using the simple backend and not the jaxws. I have tried
many things and although I could get away from that exception I was
beaten by the same exception later on in reader.next() in
StaxUtils.java:1309
I have asked the same question in
http://mail-archives.apache.org/mod_mbox/cxf-users/201304.mbox/%[email protected]%3E
and although it was possible to configure the client programmatically it
was impossible to configure the server via spring.
Finally we resolved to the following trick in our server-beans.xml
<bean
class="org.springframework.beans.factory.config.MethodInvokingFactoryBean">
<property name="targetClass" value="java.lang.System" />
<property name="targetMethod" value="setProperty" />
<property name="arguments">
<list>
<value>org.apache.cxf.stax.maxChildElements</value>
<value>1000000</value>
</list>
</property>
</bean>
because setting the property it is the only thing that it works reliably.
On 07/23/2013 12:23 AM, unicyco wrote:
I'm trying to change the org.apache.cxf.stax.maxChildElements value without
luck. How can I override the default value of 50,000? I've tried injecting
it as a jaxws:property on the endpoint and as a constructor property map
entry on the interceptor. Where should I be injecting it?
Here's my code:
<jaxws:endpoint
id="timeEndpoint"
implementor="#timeService"
address="/TimeService">
<jaxws:properties>
<entry
key="org.apache.cxf.stax.maxChildElements"
value="-1" />
</jaxws:properties>
<jaxws:inInterceptors>
<bean
id="securityInterceptor"
class="com.mycompany.WSS4JSecurityInterceptor">
<constructor-arg>
<map>
<entry
key="org.apache.cxf.stax.maxChildElements"
value="-1" />
</map>
</constructor-arg>
<property
name="usernameInterceptor"
ref="usernameInterceptor" />
<property
name="certificateInterceptor"
ref="certificateInterceptor" />
</bean>
</jaxws:inInterceptors>
</jaxws:endpoint>
<bean
id="usernameInterceptor"
class="org.apache.cxf.ws.security.wss4j.WSS4JInInterceptor">
<constructor-arg>
<map>
<entry
key="action"
value="UsernameToken" />
<entry
key="passwordType"
value="PasswordText" />
</map>
</constructor-arg>
</bean>
<bean
id="certificateInterceptor"
class="org.apache.cxf.ws.security.wss4j.WSS4JInInterceptor">
<constructor-arg>
<map>
<entry
key="action"
value="Signature" />
<entry
key="signaturePropFile"
value="server_sign.properties" />
</map>
</constructor-arg>
</bean>
public class WSS4JSecurityInterceptor extends WSS4JInInterceptor implements
InitializingBean {
private static final Logger logger =
LoggerFactory.getLogger(WSS4JSecurityInterceptor.class);
private WSS4JInInterceptor certificateInterceptor = null;
private WSS4JInInterceptor usernameInterceptor = null;
public void setCertificateInterceptor(WSS4JInInterceptor
certificateInterceptor) {
this.certificateInterceptor = certificateInterceptor;
}
public void setUsernameInterceptor(WSS4JInInterceptor
usernameInterceptor)
{
this.usernameInterceptor = usernameInterceptor;
}
public WSS4JSecurityInterceptor() {
super();
}
public WSS4JSecurityInterceptor(Map<String, Object> properties) {
super(properties);
}
@Override
public void afterPropertiesSet() throws Exception {
}
@Override
public void handleMessage(SoapMessage message) throws Fault {
SoapMessage messageClone = (SoapMessage) message.clone();
boolean authenticated = true;
try {
usernameInterceptor.handleMessage(messageClone);
} catch (Exception e) {
authenticated = false;
logger.debug("Username/password authentication failed");
}
if (authenticated) {
logger.info("Successfully authenticated using
username/password");
return;
}
authenticated = true;
try {
certificateInterceptor.handleMessage(message);
} catch (Exception e) {
authenticated = false;
logger.debug("Certificate authentication failed", e);
}
if (!authenticated) {
logger.error("Unable to authenticate!");
throw new AuthenticationException("Unable to
authenticate");
}
logger.info("Successfully authenticated using certificate");
}
}
--
View this message in context:
http://cxf.547215.n5.nabble.com/2-possible-validators-interceptors-tp5731252p5731284.html
Sent from the cxf-user mailing list archive at Nabble.com.
--
__________________________________
Vassilis Virvilis Ph.D.
Head of IT
Biovista Inc.
US Offices
2421 Ivy Road
Charlottesville, VA 22903
USA
T: +1.434.971.1141
F: +1.434.971.1144
European Offices
34 Rodopoleos Street
Ellinikon, Athens 16777
GREECE
T: +30.210.9629848
F: +30.210.9647606
www.biovista.com
Biovista is a privately held biotechnology company that finds novel uses
for existing drugs, and profiles their side effects using their
mechanism of action. Biovista develops its own pipeline of drugs in CNS,
oncology, auto-immune and rare diseases. Biovista is collaborating with
biopharmaceutical companies on indication expansion and de-risking of
their portfolios and with the FDA on adverse event prediction.