blob: 7ece4e148c750da13b2cae18f1862e2fe119ad82 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.camel.quarkus.component.cxf.soap.it;
import java.util.HashMap;
import java.util.Map;
import javax.enterprise.context.ApplicationScoped;
import javax.enterprise.inject.Produces;
import javax.inject.Inject;
import javax.inject.Named;
import com.helloworld.service.CodeFirstService;
import com.helloworld.service.HelloPortType;
import org.apache.camel.builder.RouteBuilder;
import org.apache.camel.component.cxf.common.message.CxfConstants;
import org.apache.camel.component.cxf.jaxws.CxfEndpoint;
import org.apache.cxf.ext.logging.LoggingFeature;
import org.apache.cxf.ws.security.wss4j.WSS4JOutInterceptor;
import org.apache.wss4j.common.ConfigurationConstants;
import org.eclipse.microprofile.config.inject.ConfigProperty;
@ApplicationScoped
public class CxfSoapRoutes extends RouteBuilder {
@Inject
@Named("passwordCallback")
PasswordCallback passwordCallback;
@Inject
@Named("loggingFeature")
LoggingFeature loggingFeature;
@Inject
@Named("wssInterceptor")
WSS4JOutInterceptor wssInterceptor;
@ConfigProperty(name = "wiremock.url")
String serviceBaseUri;
@Override
public void configure() {
/* Client */
from("direct:simpleSoapClient")
.to("cxf:bean:soapClientEndpoint?dataFormat=POJO");
from("direct:wsSecurityClient")
.to("cxf:bean:secureEndpoint?dataFormat=POJO");
from("direct:complexSoapClient")
.setHeader(CxfConstants.OPERATION_NAME).constant("Person")
.to("cxf:bean:soapClientEndpoint?dataFormat=POJO");
/* Service */
from("cxf:bean:soapServiceEndpoint")
.setBody().simple("Hello ${body} from CXF service");
from("cxf:bean:codeFirstServiceEndpoint")
.setBody().constant("Hello CamelQuarkusCXF");
}
@Produces
@ApplicationScoped
@Named
WSS4JOutInterceptor wssInterceptor() {
final Map<String, Object> props = new HashMap<>();
props.put(ConfigurationConstants.ACTION, "UsernameToken");
props.put(ConfigurationConstants.PASSWORD_TYPE, "PasswordText");
props.put(ConfigurationConstants.USER, "camel");
props.put("passwordCallbackRef", passwordCallback);
props.put(ConfigurationConstants.ADD_USERNAMETOKEN_NONCE, "true");
props.put(ConfigurationConstants.ADD_USERNAMETOKEN_CREATED, "true");
return new WSS4JOutInterceptor(props);
}
@Produces
@ApplicationScoped
@Named
public LoggingFeature loggingFeature() {
final LoggingFeature result = new LoggingFeature();
result.setPrettyLogging(true);
return result;
}
@Produces
@ApplicationScoped
@Named
CxfEndpoint secureEndpoint() {
final CxfEndpoint result = new CxfEndpoint();
result.setServiceClass(HelloPortType.class);
result.setAddress(serviceBaseUri + "/hellowss");
result.setWsdlURL("wsdl/HelloService.wsdl");
result.getFeatures().add(loggingFeature);
result.getOutInterceptors().add(wssInterceptor);
return result;
}
@Produces
@ApplicationScoped
@Named
CxfEndpoint soapClientEndpoint() {
final CxfEndpoint result = new CxfEndpoint();
result.setServiceClass(HelloPortType.class);
result.setAddress(serviceBaseUri + "/hello");
result.setWsdlURL("wsdl/HelloService.wsdl");
result.getFeatures().add(loggingFeature);
return result;
}
@Produces
@ApplicationScoped
@Named
CxfEndpoint soapServiceEndpoint() {
final CxfEndpoint result = new CxfEndpoint();
result.setServiceClass(HelloPortType.class);
result.setAddress("/hello");
result.setWsdlURL("wsdl/HelloService.wsdl");
result.getFeatures().add(loggingFeature);
return result;
}
@Produces
@ApplicationScoped
@Named
CxfEndpoint codeFirstServiceEndpoint() {
final CxfEndpoint result = new CxfEndpoint();
result.setServiceClass(CodeFirstService.class);
result.setAddress("/codefirst");
result.getFeatures().add(loggingFeature);
return result;
}
}