Hi !
I want to write a DFS client that should be deployed on JBOSS 4.2.3. I already have an implementation but that doesn't work without modifying jboss jaxws libraries because of the authentication methode used in SOAP messages from DFS.
Thats why I wanted to write a pure WSDL based client that manipulates the SOAP header itself and don't use the jaxws libraries from EMC but I got the following problem:
com.emc.documentum.fs.services.core.SerializableException: "Create" operation failed for object: [] [id =null] PROPERTIES [].
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
at com.sun.xml.ws.fault.SOAPFaultBuilder.createException(SOAPFaultBuilder.java:113)
at com.sun.xml.ws.client.sei.SyncMethodHandler.invoke(SyncMethodHandler.java:236)
at com.sun.xml.ws.client.sei.SyncMethodHandler.invoke(SyncMethodHandler.java:206)
at com.sun.xml.ws.client.sei.SEIStub.invoke(SEIStub.java:103)
at $Proxy33.create(Unknown Source)
at com.j4care.ws.emc.documentum.test.TestClient2.main(TestClient2.java:146)
This is my test class that is started from inside of Eclipse:
import java.io.File;
import java.io.FileInputStream;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.ArrayList;
import java.util.List;
import javax.xml.namespace.QName;
import javax.xml.ws.handler.Handler;
import javax.xml.ws.handler.HandlerResolver;
import javax.xml.ws.handler.PortInfo;
import com.emc.documentum.fs.datamodel.core.DataObject;
import com.emc.documentum.fs.datamodel.core.DataPackage;
import com.emc.documentum.fs.datamodel.core.ObjectIdentity;
import com.emc.documentum.fs.datamodel.core.OperationOptions;
import com.emc.documentum.fs.datamodel.core.content.BinaryContent;
import com.emc.documentum.fs.datamodel.core.content.ContentTransferMode;
import com.emc.documentum.fs.datamodel.core.properties.Property;
import com.emc.documentum.fs.datamodel.core.properties.PropertySet;
import com.emc.documentum.fs.datamodel.core.properties.StringProperty;
import com.emc.documentum.fs.services.core.ObjectService;
import com.j4care.ws.emc.documentum.DfsSoapHeaderHandler;
public class TestClient2 {
public static void main(String args[]) throws MalformedURLException {
final String defaultRepositoryName = "CenterStageBeta";
final String userName = "arnold";
final String password = "arnold";
try {
ObjectService objectService = new ObjectService(new URL("http://192.168.2.138:9082/services/core/ObjectService?wsdl"), new QName("http://core.services.fs.documentum.emc.com/", "ObjectService"));
((ObjectService)objectService).setHandlerResolver(new HandlerResolver() {
public List<Handler> getHandlerChain(PortInfo info) {
List<Handler> handlerList = new ArrayList<Handler>();
Handler handler = new DfsSoapHeaderHandler(userName,password,defaultRepositoryName);
handlerList.add(handler);
return handlerList;
}
});
File testFile = new File("/Users/arnold/test.file");
if (!testFile.exists())
{
throw new RuntimeException("Test file: " + testFile.toString() + " does not exist");
}
DataObject dataObject = new DataObject();
ObjectIdentity identity = new ObjectIdentity();
identity.setRepositoryName(defaultRepositoryName);
PropertySet properties = new PropertySet();
List<Property> propertiesList = properties.getProperties();
propertiesList = new ArrayList<Property>();
StringProperty stringProperty = new StringProperty();
stringProperty.setName("object_name");
stringProperty.setValue(testFile.getName());
propertiesList.add(stringProperty);
stringProperty.setName("title");
stringProperty.setValue(testFile.getName());
propertiesList.add(stringProperty);
stringProperty.setName("a_content_type");
stringProperty.setValue("dcm");
propertiesList.add(stringProperty);
BinaryContent f = new BinaryContent();
f.setFormat("bin");
f.setContentTransferMode(ContentTransferMode.MTOM);
FileInputStream fileInputStream = new FileInputStream(testFile);
byte[] data = new byte[(int) testFile.length()];
fileInputStream.read(data);
fileInputStream.close();
f.setValue(data);
dataObject.setType("dm_document");
dataObject.setIdentity(identity);
dataObject.setProperties(properties);
dataObject.getContents().add(f);
DataPackage dataPackage = new DataPackage();
dataPackage.getDataObjects().add(dataObject);
OperationOptions operationOptions = null;
DataPackage response = objectService.getObjectServicePort().create(dataPackage, operationOptions);
System.out.println(response.getDataObjects().get(0).getIdentity().getObjectId());
} catch (Exception e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
}
anyone knows where the problem could be or how I could use the jaxws implementation (packed in a sar file) of EMC from inside of jboss ?
yours
Arnold