Could you create a zip file instead that I can just extract and run please?
Colm. On Tue, Jun 24, 2014 at 1:49 PM, Stephanie Dammann < [email protected]> wrote: > Hello again, > > thanks for your answer. > Here is a sample project. > > I think some configurations might be wrong, but I can't find out what > needs to be changed, in order to run this project properly. > I just started with web service development and I thought the > UsernameToken + password-example should be easy. > It would be nice if you could help me. > > Thanks in advance. > > Regards > Stephanie > > Here is the sample code: > > The service > package net.eads.astrium; > > import javax.jws.WebMethod; > import javax.jws.WebParam; > import javax.jws.WebService; > import javax.xml.bind.annotation.XmlSeeAlso; > import javax.xml.namespace.QName; > import javax.xml.ws.RequestWrapper; > import javax.xml.ws.ResponseWrapper; > > import org.apache.cxf.annotations.EndpointProperties; > import org.apache.cxf.annotations.EndpointProperty; > > import javax.jws.soap.SOAPBinding; > import javax.jws.soap.SOAPBinding.*; > > @WebService > @SOAPBinding(style=Style.DOCUMENT, use=Use.ENCODED) > @EndpointProperties( > { > @EndpointProperty(key = "action", value="UsernameToken"), > @EndpointProperty(key = "passwordType", > value="PasswordText"), > }) > @XmlSeeAlso({net.eads.astrium.types.ObjectFactory.class}) > public interface CurrentTimeReadable { > public final static QName TimerPort = new QName(" > http://localhost:8181/cxf/CurrentTimeReadableService", "TimerPort"); > @RequestWrapper(localName = "GetCurrentTimeReadable", className = > "net.eads.astrium.types.GetCurrentTimeReadable") > @ResponseWrapper(localName = "GetCurrentTimeReadableResponse", > className = "net.eads.astrium.types.GetCurrentTimeReadableResponse") > @WebMethod(operationName = "GetCurrentTimeReadable") > public void getCurrentTime( > @WebParam(mode = WebParam.Mode.OUT, name = "time") > javax.xml.ws.Holder<java.lang.String> ssn > ); > } > > > The serviceImpl > > package net.eads.astrium; > > import java.text.DateFormat; > import java.util.Date; > import javax.jws.WebService; > import javax.xml.ws.Holder; > > @WebService(serviceName = "CurrentTimeReadableService", endpointInterface > = "net.eads.astrium.CurrentTimeReadable") > public class CurrentTimeReadableImpl implements CurrentTimeReadable { > > public void getCurrentTime(Holder<String> time) > { > time.value = DateFormat.getDateTimeInstance().format(new Date()); > } > > } > > The server > > package net.eads.astrium; > > import java.net.URL; > import java.util.HashMap; > import java.util.Map; > > import javax.xml.ws.Endpoint; > > import org.apache.cxf.Bus; > import org.apache.cxf.BusFactory; > import org.apache.cxf.bus.spring.SpringBusFactory; > import org.apache.cxf.jaxws.EndpointImpl; > import org.apache.cxf.ws.security.wss4j.WSS4JInInterceptor; > import org.apache.cxf.ws.security.wss4j.WSS4JOutInterceptor; > > public class Server { > protected Server() throws Exception { > System.out.println("Starting Server"); > > Object implementor = new CurrentTimeReadableImpl(); > String address = " > http://localhost:8181/cxf/CurrentTimeReadableService"; > EndpointImpl impl = (EndpointImpl)Endpoint.publish(address, > implementor); > > Map<String, Object> outProps = new HashMap<String, Object>(); > outProps.put("action", "UsernameToken Timestamp"); > > outProps.put("passwordType", "PasswordText"); > outProps.put("user", "Alice"); > outProps.put("passwordCallbackClass", > "net.eads.astrium.UTPasswordCallback"); > > impl.getOutInterceptors().add(new WSS4JOutInterceptor(outProps)); > > Map<String, Object> inProps = new HashMap<String, Object>(); > inProps.put("action", "UsernameToken Timestamp"); > inProps.put("passwordType", "PasswordDigest"); > inProps.put("passwordCallbackClass", > "net.eads.astrium.UTPasswordCallback"); > > impl.getInInterceptors().add(new WSS4JInInterceptor(inProps)); > } > > public static void main(String args[]) throws Exception { > > SpringBusFactory bf = new SpringBusFactory(); > URL busFile = Server.class.getResource("/wssec.xml"); > System.out.println("URL: " + busFile); > Bus bus = bf.createBus(busFile.toString()); > > BusFactory.setDefaultBus(bus); > > new Server(); > System.out.println("Server ready..."); > > Thread.sleep(5 * 60 * 1000); > > bus.shutdown(true); > System.out.println("Server exiting"); > System.exit(0); > } > } > > > The PasswordCallback (same for Client and server) > > package net.eads.astrium; > > import java.io.IOException; > import java.util.HashMap; > import java.util.Map; > > import javax.security.auth.callback.Callback; > import javax.security.auth.callback.CallbackHandler; > import javax.security.auth.callback.UnsupportedCallbackException; > > import org.apache.wss4j.common.ext.WSPasswordCallback; > > /** > */ > > public class UTPasswordCallback implements CallbackHandler { > > private Map<String, String> passwords = > new HashMap<String, String>(); > > public UTPasswordCallback() { > passwords.put("Alice", "ecilA"); > passwords.put("abcd", "dcba"); > } > > /** > * Here, we attempt to get the password from the private > * alias/passwords map. > */ > public void handle(Callback[] callbacks) throws IOException, > UnsupportedCallbackException { > for (int i = 0; i < callbacks.length; i++) { > WSPasswordCallback pc = (WSPasswordCallback)callbacks[i]; > > String pass = passwords.get(pc.getIdentifier()); > if (pass != null) { > pc.setPassword(pass); > return; > } > } > } > > /** > * Add an alias/password pair to the callback mechanism. > */ > public void setAliasPassword(String alias, String password) { > passwords.put(alias, password); > } > } > > > The client > > package net.eads.astrium.client; > > import java.net.URL; > import java.util.HashMap; > import java.util.Map; > > import net.eads.astrium.CurrentTimeReadable; > > import org.apache.cxf.Bus; > import org.apache.cxf.BusFactory; > import org.apache.cxf.jaxws.JaxWsProxyFactoryBean; > import org.apache.cxf.ws.security.wss4j.WSS4JInInterceptor; > import org.apache.cxf.ws.security.wss4j.WSS4JOutInterceptor; > import org.apache.cxf.bus.spring.SpringBusFactory; > import org.apache.cxf.frontend.ClientProxy; > > public class Client { > public static void main(String args[]) throws Exception { > JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean(); > factory.setServiceClass(CurrentTimeReadable.class); > if (args != null && args.length > 0 && !"".equals(args[0])) { > factory.setAddress(args[0]); > } else { > factory.setAddress(" > http://localhost:8181/cxf/CurrentTimeReadableService"); > } > > Map<String, Object> outProps = new HashMap<String, Object>(); > outProps.put("action", "UsernameToken Timestamp"); > > outProps.put("passwordType", "PasswordDigest"); > outProps.put("user", "abcd"); > outProps.put("passwordCallbackClass", > "net.eads.astrium.client.UTPasswordCallback"); > > Map<String, Object> inProps = new HashMap<String, Object>(); > inProps.put("action", "UsernameToken Timestamp"); > inProps.put("passwordType", "PasswordText"); > inProps.put("passwordCallbackClass", > "net.eads.astrium.client.UTPasswordCallback"); > CurrentTimeReadable client = (CurrentTimeReadable) > factory.create(); > ClientProxy.getClient(client).getInInterceptors().add(new > WSS4JInInterceptor(inProps)); > ClientProxy.getClient(client).getOutInterceptors().add(new > WSS4JOutInterceptor(outProps)); > System.out.println("Invoking getCurrentTime..."); > javax.xml.ws.Holder<java.lang.String> _getCurrentTime_time = new > javax.xml.ws.Holder<java.lang.String>(); > client.getCurrentTime(_getCurrentTime_time); > > System.out.println("the current time from > "+factory.getAddress()+"=" + _getCurrentTime_time.value); > } > } > > META_Inf/sping/beans.xml > > <?xml version="1.0" encoding="UTF-8"?> > <!-- Generated by Apache ServiceMix Archetype --> > <beans xmlns="http://www.springframework.org/schema/beans" > xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:jaxws=" > http://cxf.apache.org/jaxws" > xsi:schemaLocation=" > http://www.springframework.org/schema/beans > http://www.springframework.org/schema/beans/spring-beans.xsd > http://cxf.apache.org/jaxws > http://cxf.apache.org/schemas/jaxws.xsd > http://www.springframework.org/schema/osgi > http://www.springframework.org/schema/osgi/spring-osgi.xsd"> > <!-- <bean id="UsernameCallback" > class="net.eads.astrium.test.ClientPasswordCallback"/> --> > <jaxws:endpoint id="HTTPEndpoint" > implementor="net.eads.astrium.CurrentTimeReadableImpl" > address="/CurrentTimeReadableService"> > </jaxws:endpoint> > > </beans> > > Pom.xml > > <?xml version="1.0" encoding="UTF-8"?> > <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi=" > http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation=" > http://maven.apache.org/POM/4.0.0 > http://maven.apache.org/xsd/maven-4.0.0.xsd"> > > <!-- Generated by Apache ServiceMix Archetype --> > > <modelVersion>4.0.0</modelVersion> > > <groupId>net.eads.astrium</groupId> > <artifactId>cxf-basic-currenttimereadable</artifactId> > <packaging>bundle</packaging> > <version>1.1-SNAPSHOT</version> > <name>Apache ServiceMix :: CXF Current Time Readable OSGi Bundle > #1.1</name> > > <dependencies> > <dependency> > <groupId>org.apache.geronimo.specs</groupId> > <artifactId>geronimo-ws-metadata_2.0_spec</artifactId> > <version>1.1.2</version> > </dependency> > <dependency> > <groupId>javax.xml.bind</groupId> > <artifactId>jaxb-api</artifactId> > <version>2.2</version> > </dependency> > <dependency> > <groupId>org.apache.geronimo.specs</groupId> > <artifactId>geronimo-jaxws_2.2_spec</artifactId> > <version>1.0</version> > </dependency> > > <!-- Needed for Client --> > <dependency> > <groupId>org.apache.cxf</groupId> > <artifactId>cxf-rt-frontend-jaxws</artifactId> > <version>2.6.0</version> > </dependency> > <dependency> > <groupId>org.apache.cxf</groupId> > <artifactId>cxf-rt-transports-http</artifactId> > <version>2.6.0</version> > </dependency> > <dependency> > <groupId>org.apache.cxf</groupId> > <artifactId>cxf-rt-ws-security</artifactId> > <version>3.0.0</version> > </dependency> > </dependencies> > > <build> > <defaultGoal>install</defaultGoal> > <plugins> > <plugin> > <groupId>org.apache.maven.plugins</groupId> > <artifactId>maven-compiler-plugin</artifactId> > <version>2.0.2</version> > <configuration> > <source>1.5</source> > <target>1.5</target> > <encoding>UTF-8</encoding> > </configuration> > </plugin> > <plugin> > <groupId>org.apache.maven.plugins</groupId> > <artifactId>maven-resources-plugin</artifactId> > <version>2.4.3</version> > <configuration> > <encoding>UTF-8</encoding> > </configuration> > </plugin> > <plugin> > <groupId>org.apache.felix</groupId> > <artifactId>maven-bundle-plugin</artifactId> > <version>2.3.6</version> > <extensions>true</extensions> > <configuration> > <instructions> > > <Bundle-SymbolicName>${project.artifactId}</Bundle-SymbolicName> > <Import-Package> > javax.jws, > javax.wsdl, > javax.xml.bind, > javax.xml.bind.annotation, > javax.xml.namespace, > javax.xml.ws, > META-INF.cxf, > META-INF.cxf.osgi, > org.apache.cxf.bus, > org.apache.cxf.bus.spring, > org.apache.cxf.bus.resource, > org.apache.cxf.configuration.spring, > org.apache.cxf.resource, > org.apache.cxf.jaxws, > org.apache.cxf.transport.http, > org.springframework.beans.factory.config > </Import-Package> > <Private-Package> > !net.eads.astrium.client, > net.eads.astrium, > net.eads.astrium.types > </Private-Package> > > <Require-Bundle>org.apache.cxf.bundle</Require-Bundle> > > > <DynamicImport-Package>*</DynamicImport-Package> > > </instructions> > </configuration> > </plugin> > </plugins> > </build> > > <profiles> > <profile> > <id>client</id> > <build> > <defaultGoal>test</defaultGoal> > <plugins> > <plugin> > <groupId>org.codehaus.mojo</groupId> > <artifactId>exec-maven-plugin</artifactId> > <executions> > <execution> > <phase>test</phase> > <goals> > <goal>java</goal> > </goals> > <configuration> > > <mainClass>net.eads.astrium.client.CurrentTimeClient</mainClass> > </configuration> > </execution> > </executions> > </plugin> > </plugins> > </build> > </profile> > </profiles> > > </project> > > > > > Von: Stephanie Dammann > Gesendet: Montag, 23. Juni 2014 16:03 > An: '[email protected]' > Betreff: WS-Security > > Hello there, > > I am trying to build an Java-First Web Service with WS-Security > (UsernameToken + Password). > I have found the CXF sample ws_security/ut and I wanted to use this > example to extend my own Web Service. > I have build the Client with the WSS4Jin- and OutInterceptor and so on, > but it isn't working. > I have got this exception Exception in thread "main" > javax.xml.ws.soap.SOAPFaultException: MustUnderstand headers: [{ > http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd}Security] > are not understood. > I can't find out what I need to do. I have included the > cxf-rt-ws-security-dependency in the pom.xml and I have imported the > library. > Could you please help me? > > Thanks in advance. > > Regards > Stephanie > > > -- Colm O hEigeartaigh Talend Community Coder http://coders.talend.com
