Axis Ws-Security

maxpade

Mitglied
Hallo Allerseits,

ich möchte auf einen gesicherten WebService zugreifen (x.509) und habe einen Client,. einmal aus einer WSDL-Datei erzeugt und einmal ohne WSDL codiert.
Es ist eigentlich ein einfaches Beispiel, dass ich ausprobiere. Anbei alles was ich so gemacht habe, vielleicht sieht jemand den Fehler schon aus dem Fehlercode:

Egal welchen Client ich benutze bekomme ich folgende Fehlermeldung :
Code:
Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/xml/utils/URI$MalformedURIException
	at org.apache.ws.security.message.WSSecSignature.prepare(WSSecSignature.java:350)
	at org.apache.ws.security.message.WSSecSignature.build(WSSecSignature.java:703)
	at org.apache.ws.security.action.SignatureAction.execute(SignatureAction.java:54)
	at org.apache.ws.security.handler.WSHandler.doSenderAction(WSHandler.java:192)
	at org.apache.ws.axis.security.WSDoAllSender.invoke(WSDoAllSender.java:170)
	at org.apache.axis.strategies.InvocationStrategy.visit(InvocationStrategy.java:32)
	at org.apache.axis.SimpleChain.doVisiting(SimpleChain.java:118)
	at org.apache.axis.SimpleChain.invoke(SimpleChain.java:83)
	at org.apache.axis.client.AxisClient.invoke(AxisClient.java:127)
	at org.apache.axis.client.Call.invokeEngine(Call.java:2784)
	at org.apache.axis.client.Call.invoke(Call.java:2767)
	at org.apache.axis.client.Call.invoke(Call.java:2443)
	at org.apache.axis.client.Call.invoke(Call.java:2366)
	at org.apache.axis.client.Call.invoke(Call.java:1812)
	at ha.TestSignaturSoapBindingStub.getGreeting(TestSignaturSoapBindingStub.java:106)
	at TestSignaturClient.main(TestSignaturClient.java:18)


Mein Server sieht so aus
Code:
public class TestSignatur {
  public String getGreeting(String name)
  {
    return "Hello "+name +"!";
  }
}

Der Client sieht so aus (ohne WSDL-Ableitung:
Code:
import org.apache.axis.configuration.FileProvider;
import org.apache.axis.EngineConfiguration;
import org.apache.axis.client.Call;
import org.apache.axis.client.Service;
import org.apache.axis.encoding.XMLType;
import javax.xml.rpc.ParameterMode;
import java.net.URL;



public class TestSignaturClient
{
 public static void main(String[] args) throws Exception
 {
	 try
	 {
		 EngineConfiguration config = new FileProvider("c:\\java\\tomcat\\webapps\\axis\\WEB-INF\\client-config.wsdd");
		 Service service = new Service(config);
		 Call call=(Call) service.createCall();
		 URL url = new URL("http://localhost:8080/axis/services/TestService");
		 call.setTargetEndpointAddress(url);
		 call.setOperationName("getGreeting");
		 call.addParameter("name",XMLType.XSD_STRING,ParameterMode.IN);
		 call.setReturnType(XMLType.XSD_STRING);

		 Object parameters[]=new Object[1];
		 parameters[0]="Tester";
		 Object returnValue=call.invoke(parameters);
		 System.out.println("Response: "+returnValue);
	 }
	 catch(Exception e)
	 {
		 e.printStackTrace();
	 }

 }
}


aus wsdl- abgeleitet:

Code:
import ha.*;

import java.rmi.RemoteException;
import javax.xml.rpc.ServiceException;

import org.apache.axis.EngineConfiguration;
import org.apache.axis.configuration.FileProvider;


public class TestSignaturClient
{
 public static void main(String[] args) throws Exception
 {
  EngineConfiguration config = new FileProvider("c:\\java\\tomcat\\webapps\\axis\\WEB-INF\\client-config.wsdd");
   TestSignaturServiceLocator loc = new TestSignaturServiceLocator(config);
   TestSignatur_PortType pt = loc.getTestSignatur();
   pt.getGreeting("hallo");
 }
}

meine server-wsdd (aussschnitt)
Code:
 <service name="TestSignatur" provider="java:RPC" style="document" use="literal">
 <requestFlow>
   <handler type="soapmonitor"/>
   <handler type="java:org.apache.ws.axis.security.WSDoAllReceiver">
     <parameter name="action" value="Signature"/>
     <parameter name="signaturePropFile" value="server_crypto.properties" />
   </handler>
  </requestFlow>
  <responseFlow>
   <handler type="java:org.apache.ws.axis.security.WSDoAllSender">
     <parameter name="action" value="Signature"/>
     <parameter name="user" value="server"/>
     <parameter name="passwordCallbackClass" value="PWCallback"/>
     <parameter name="signaturePropFile" value="server_crypto.properties" />
   </handler>
   <handler type="soapmonitor"/>
  </responseFlow>
  <parameter name="className" value="TestSignatur"/>
  <parameter name="allowedMethods" value="*"/>
  <parameter name="scope" value="application"/>
 </service>

die client wsdd
Code:
<deployment xmlns="http://xml.apache.org/axis/wsdd/" xmlns:java="http://xml.apache.org/axis/wsdd/providers/java">
<transport name="http" pivot="java:org.apache.axis.transport.http.HTTPSender"/>
<globalConfiguration >
	<requestFlow >
		<handler type="java:org.apache.ws.axis.security.WSDoAllSender" >
		<parameter name="action" value="Signature"/>
		<parameter name="user" value="client"/>
		<parameter name="passwordCallbackClass" value="PWCallbackClient"/>
		<parameter name="signaturePropFile" value="client_crypto.properties" />
		<parameter name="mustUnderstand" value="false" />
                </handler>
	</requestFlow>
	<responseFlow>
		<handler type="java:org.apache.ws.axis.security.WSDoAllReceiver">
		<parameter name="action" value="Signature"/>
		<parameter name="signaturePropFile" value="client_crypto.properties" />
		</handler>
	</responseFlow>
</globalConfiguration>
</deployment>

die client_crypto.properties und die client.keystore sowie die server_crypto.properties und die server.keystore sind im classes Verzeichnis
 
Hallo,

die Klasse "org/apache/xml/utils/URI$MalformedURIException" findet man in dem xalan-xxx.jar welches der AXIS Distribution beiliegt. Um Axis benutzen zu können müssen in der Laufzeitumgebung auch die benötigten Libs (aus dem /lib-Verzeichnis deiner Axis Distribution) verfügbar sein.

Gruß Tom
 
Achso mir hat also einfach diese lib gefehlt.....:eek:
hmm danke :)
ich hab ne nächste frage, die stell ich aber lieber in einem neuen thread.
danke dir nochmal
 
Zurück