Peter Palaga created CXF-8834:
---------------------------------
Summary: "Operation [{.../wsdl}Issue] already exists" when calling
JaxWsServerFactoryBean.create() for SecurityTokenService
Key: CXF-8834
URL: https://issues.apache.org/jira/browse/CXF-8834
Project: CXF
Issue Type: Bug
Components: STS
Affects Versions: 4.0.0
Reporter: Peter Palaga
In quarkus-cxf, we are executing the following snippet
{code}
JaxWsServerFactoryBean factoryBean = new JaxWsServerFactoryBean();
factoryBean.setServiceClass(Thread.currentThread().getContextClassLoader().loadClass(sei));
factoryBean.setAddress(path);
Server server = factoryBean.create();
{code}
for all service interfaces available in the class path of an application. We do
it at build time, for the sake of generating all necessary ancillary classes.
When doing this for
{{org.apache.cxf.ws.security.sts.provider.SecurityTokenService}}, the following
exception is thrown:
{code}
java.lang.IllegalArgumentException: An operation with name
[{http://docs.oasis-open.org/ws-sx/ws-trust/200512/wsdl}Issue] already exists
in this service
at
org.apache.cxf.service.model.InterfaceInfo.addOperation(InterfaceInfo.java:78)
at
org.apache.cxf.wsdl.service.factory.ReflectionServiceFactoryBean.createOperation(ReflectionServiceFactoryBean.java:1008)
at
org.apache.cxf.jaxws.support.JaxWsServiceFactoryBean.createOperation(JaxWsServiceFactoryBean.java:631)
at
org.apache.cxf.wsdl.service.factory.ReflectionServiceFactoryBean.createInterface(ReflectionServiceFactoryBean.java:1000)
at
org.apache.cxf.wsdl.service.factory.ReflectionServiceFactoryBean.buildServiceFromClass(ReflectionServiceFactoryBean.java:460)
at
org.apache.cxf.jaxws.support.JaxWsServiceFactoryBean.buildServiceFromClass(JaxWsServiceFactoryBean.java:693)
at
org.apache.cxf.wsdl.service.factory.ReflectionServiceFactoryBean.initializeServiceModel(ReflectionServiceFactoryBean.java:529)
at
org.apache.cxf.wsdl.service.factory.ReflectionServiceFactoryBean.create(ReflectionServiceFactoryBean.java:262)
at
org.apache.cxf.jaxws.support.JaxWsServiceFactoryBean.create(JaxWsServiceFactoryBean.java:199)
at
org.apache.cxf.frontend.AbstractWSDLBasedEndpointFactory.createEndpoint(AbstractWSDLBasedEndpointFactory.java:103)
at
org.apache.cxf.frontend.ServerFactoryBean.create(ServerFactoryBean.java:168)
at
org.apache.cxf.jaxws.JaxWsServerFactoryBean.create(JaxWsServerFactoryBean.java:210)
at
io.quarkiverse.cxf.deployment.CxfDeploymentUtils.createServer(CxfDeploymentUtils.java:42)
at
io.quarkiverse.cxf.deployment.QuarkusCxfProcessor.lambda$generateClasses$2(QuarkusCxfProcessor.java:213)
...
{code}
This is caused by the fact that there are two methods annotated with
{{@WebMethod(operationName = "Issue")}} in
{{org.apache.cxf.ws.security.sts.provider.SecurityTokenService}}:
{code}
@WebResult(name = "RequestSecurityTokenResponseCollection",
targetNamespace =
"http://docs.oasis-open.org/ws-sx/ws-trust/200512",
partName = "responseCollection")
@Action(input =
"http://docs.oasis-open.org/ws-sx/ws-trust/200512/RST/Issue",
output =
"http://docs.oasis-open.org/ws-sx/ws-trust/200512/RSTRC/IssueFinal")
@WebMethod(operationName = "Issue")
RequestSecurityTokenResponseCollectionType issue(
@WebParam(partName = "request",
name = "RequestSecurityToken",
targetNamespace =
"http://docs.oasis-open.org/ws-sx/ws-trust/200512")
RequestSecurityTokenType request
);
@WebResult(name = "RequestSecurityTokenResponse",
targetNamespace =
"http://docs.oasis-open.org/ws-sx/ws-trust/200512",
partName = "response")
@Action(input =
"http://docs.oasis-open.org/ws-sx/ws-trust/200512/RST/Issue",
output =
"http://docs.oasis-open.org/ws-sx/ws-trust/200512/RSTRC/IssueFinal")
@WebMethod(operationName = "Issue")
RequestSecurityTokenResponseType issueSingle(
@WebParam(partName = "request",
name = "RequestSecurityToken",
targetNamespace =
"http://docs.oasis-open.org/ws-sx/ws-trust/200512")
RequestSecurityTokenType request
);
{code}
I wonder whether one of the operationNames in SecurityTokenService needs to be
changed?
--
This message was sent by Atlassian Jira
(v8.20.10#820010)