Hi Toshi,
I'm sending you content of server-config.wsdl
Please, look at
http://marc.theaimsgroup.com/?l=axis-user&m=105650272318648&w=2
Maybe, I have to change attribute xmlns:ns1="http://activation.javax"/ in
typeMapping to xmlns:ns1=http://xml.apache.org/xml-soap. I'll we verify
//-------------server-config.wsdl-------------------------------------------
----------------------------------------------------
<?xml version="1.0" encoding="UTF-8"?>
<deployment xmlns="http://xml.apache.org/axis/wsdd/"
xmlns:java="http://xml.apache.org/axis/wsdd/providers/java">
<globalConfiguration>
<parameter name="adminPassword" value="admin"/>
<parameter name="attachments.implementation"
value="org.apache.axis.attachments.AttachmentsImpl"/>
<parameter name="sendXsiTypes" value="true"/>
<parameter name="sendMultiRefs" value="true"/>
<parameter name="sendXMLDeclaration" value="true"/>
<parameter name="axis.sendMinimizedElements" value="true"/>
<requestFlow>
<handler type="java:org.apache.axis.handlers.JWSHandler">
<parameter name="scope" value="session"/>
</handler>
<handler type="java:org.apache.axis.handlers.JWSHandler">
<parameter name="scope" value="request"/>
<parameter name="extension" value=".jwr"/>
</handler>
</requestFlow>
</globalConfiguration>
<handler name="LocalResponder"
type="java:org.apache.axis.transport.local.LocalResponder"/>
<handler name="URLMapper"
type="java:org.apache.axis.handlers.http.URLMapper"/>
<handler name="Authenticate"
type="java:org.apache.axis.handlers.SimpleAuthenticationHandler"/>
<service name="DataProvider" provider="java:EJB">
<parameter name="allowedMethods" value="getAttachment"/>
<parameter name="beanJndiName" value="DataProvider"/>
<parameter name="homeInterfaceName" value="swa.DataProviderHome"/>
<typeMapping
deserializer="org.apache.axis.encoding.ser.JAFDataHandlerDeserializerFactory
" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
qname="ns1:DataHandler"
serializer="org.apache.axis.encoding.ser.JAFDataHandlerSerializerFactory"
type="java:javax.activation.DataHandler"
xmlns:ns1="http://activation.javax"/>
</service>
<service name="AdminService" provider="java:MSG">
<parameter name="allowedMethods" value="AdminService"/>
<parameter name="enableRemoteAdmin" value="false"/>
<parameter name="className" value="org.apache.axis.utils.Admin"/>
<namespace>http://xml.apache.org/axis/wsdd/</namespace>
</service>
<service name="Version" provider="java:RPC">
<parameter name="allowedMethods" value="getVersion"/>
<parameter name="className" value="org.apache.axis.Version"/>
</service>
<transport name="http">
<requestFlow>
<handler type="URLMapper"/>
<handler type="java:org.apache.axis.handlers.http.HTTPAuthHandler"/>
</requestFlow>
</transport>
<transport name="local">
<responseFlow>
<handler type="LocalResponder"/>
</responseFlow>
</transport>
</deployment>
//--------------------------------------------------------------------------
-----------------------------------
Jacek
> Hi Jacek,
>
> Please post the wsdd for your web service ?
> Maybe a wrong setting of parameter nodes or the deployment node ...
> I'd like to touch it.
>
> Best Regards,
>
> Toshi (Toshiyuki Kimura) <[EMAIL PROTECTED]>
> R&D Headquarters
> NTT DATA Corporation
>
> -----Original Message-----
> From: Jacek Gebala [mailto:[EMAIL PROTECTED]
> Sent: Thursday, July 03, 2003 7:22 PM
> To: [EMAIL PROTECTED]
> Cc: Toshiyuki Kimura
> Subject: Re: help required for attachment using ejb as webservice
>
> Hi Toshi,
> Exactly! I should use in wsdd file:
>
>
deserializer="org.apache.axis.encoding.ser.JAFDataHandlerDeserializerFactory
> "
> serializer="org.apache.axis.encoding.ser.JAFDataHandlerSerializerFactory"
>
> instead of:
>
> deserializer="org.apache.axis.encoding.ser.BeanDeserializerFactory"
> serializer="org.apache.axis.encoding.ser.BeanSerializerFactory"
>
> After that, the example mentioned by me works.
> BUT!!! I cannot display the WSDL for this service from now on
>
> AXIS error
> Sorry, something seems to have gone wrong... here are the details:
>
> Fault - ; nested exception is:
> WSDLException: faultCode=OTHER_ERROR: Can't find prefix for
> 'http://activation.javax'. Namespace prefixes must be set on the
> Definition object using the addNamespace(...) method.:
> AxisFault
> faultCode:
{http://schemas.xmlsoap.org/soap/envelope/}Server.userException
> faultSubcode:
> faultString: WSDLException: faultCode=OTHER_ERROR: Can't find prefix
> for 'http://activation.javax'. Namespace prefixes must be set on
> the Definition object using the addNamespace(...) method.:
> faultActor:
> faultNode:
> faultDetail:
> I also updated to AXIS 1.1 final and I tried to remove typeMapping from my
> wsdd. The example still works, but I still cannot get WSDL (the same
error).
>
> Jacek.
>
>
> Hi Jacek,
>
> Yes, you have a mistake about serializer's configuration.
> If you're using AXIS 1.1 final, please try again with no
> typeMapping on your wsdd. (i.e. You should re-deploy your
> service, after you drop the typeMapping node on your wsdd.)
>
> In case of any exceptions or using AXIS 1.1 earlier, please
> try to add the right typeMapping for DataHandler by referring
> to the following sample;
> .........*.........*.........*.........*.........*.........*.........*
> <deployment xmlns="http://xml.apache.org/axis/wsdd/"
> xmlns:java="http://xml.apache.org/axis/wsdd/providers/java"
> xmlns:ns1="urn:EchoAttachmentsService" >
> <service name="urn:EchoAttachmentsService" provider="java:RPC" >
> <parameter name="className"
> value="samples.attachments.EchoAttachmentsService"/>
> <parameter name="allowedMethods" value="echo echoDir"/>
> <operation name="echo" returnQName="returnqname"
> returnType="ns1:DataHandler" >
> <parameter name="dh" type="ns1:DataHandler"/>
> </operation>
> <typeMapping
>
deserializer="org.apache.axis.encoding.ser.JAFDataHandlerDeserializerFactory
> "
> languageSpecificType="java:javax.activation.DataHandler"
> qname="ns1:DataHandler"
> serializer="org.apache.axis.encoding.ser.JAFDataHandlerSerializerFactory"
> encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
> />
> </service>
> </deployment>
> .........*.........*.........*.........*.........*.........*.........*
>
> Best Regards,
>
> Toshi (Toshiyuki Kimura) <[EMAIL PROTECTED]>
> R&D Headquarters
> NTT DATA Corporation
>
> -----Original Message-----
> From: Jacek Gebala [mailto:[EMAIL PROTECTED]
> Sent: Tuesday, July 01, 2003 7:28 PM
> To: [EMAIL PROTECTED]
> Cc: [EMAIL PROTECTED]
> Subject: Re: help required for attachment using ejb as webservice
>
> Hi Toshi,
>
> Thank you for the explanation. It was very helpful to my understanding
> of the problem.
> My problem still is not solved. Your sugestion seems to be true. I guess,
> I have a problem with serializer's configuration.
> Could you give me some hints, please? What is needed to running correctly
> such simple example?
> Maybe my "server-config.wsdd" is wrong? I show you my very simple example.
> Anyway, When I used to write the similar method
> public DataHandler getAttachment();
> in normal Java class (NOT EJB) every thing went smoothly. I mean the
example
> was working.
>
> //----Simple
EJB------------------------------------------------------------
> package swa;
>
> import javax.activation.*;
> import javax.ejb.*;
>
> import org.apache.axis.*;
>
> public class DataProviderBean implements SessionBean {
> SessionContext sessionContext;
> public void ejbCreate() throws CreateException {
> /[EMAIL PROTECTED] Complete this method*/
> }
> public void ejbRemove() {
> /[EMAIL PROTECTED] Complete this method*/
> }
> public void ejbActivate() {
> /[EMAIL PROTECTED] Complete this method*/
> }
> public void ejbPassivate() {
> /[EMAIL PROTECTED] Complete this method*/
> }
> public void setSessionContext(SessionContext sessionContext) {
> this.sessionContext = sessionContext;
> }
> public DataHandler getAttachment() {
> String doc="Hello world.";
>
> //The following two commented lines would force any attachments sent
back.
> // to be in DIME format.
> Message rspmsg =
> AxisEngine.getCurrentMessageContext().getResponseMessage();
> rspmsg.getAttachmentsImpl().setSendType(org.apache.axis.attachments.
> Attachments.SEND_TYPE_DIME);
>
> DataHandler dh = new DataHandler(doc, "text/plain");
> return dh;
> }
> }
> //----------------------------------------------------------------------
> //------WebService Client-----------------------------------------------
> package swa;
>
> import java.net.*;
> import javax.activation.*;
> import javax.xml.namespace.*;
>
> import org.apache.axis.*;
> import org.apache.axis.client.*;
> import org.apache.axis.encoding.ser.*;
> import org.apache.axis.utils.*;
>
> public class SwAClient {
>
> public void getAttachment() throws Exception {
>
> Service service = new Service();
> Call call = (Call) service.createCall();
> call.setTargetEndpointAddress( new
> URL(http://localhost:7001/webservices/services/DataProvider?wsdl));
> call.setOperationName(new QName("DataProvider","getAttachment") );
> //This is the target services method to invoke.
> QName qnameAttachment = new QName("DataProvider", "DataHandler");
>
> call.registerTypeMapping(Class.forName("javax.activation.DataHandler"),
> //Add serializer for attachment.
> qnameAttachment,
> JAFDataHandlerSerializerFactory.class,
> JAFDataHandlerDeserializerFactory.class);
> call.setReturnType( qnameAttachment);
> call.setProperty(call.ATTACHMENT_ENCAPSULATION_FORMAT,
> call.ATTACHMENT_ENCAPSULATION_FORMAT_DIME);
> Object ret = call.invoke( new Object[] {
> }
> ); //Add the attachment.
>
> if (null == ret) {
> System.out.println("Received null ");
> throw new AxisFault("", "Received null", null, null);
> }
>
> if (ret instanceof String) {
> System.out.println("Received problem response from server: "+ret);
> throw new AxisFault("", (String) ret, null, null);
> }
>
> if (!(ret instanceof DataHandler)) {
> //The wrong type of object that what was expected.
> System.out.println("Received problem response from server:" +
> ret.getClass().getName());
> throw new AxisFault("", "Received problem response from server:"
> + ret.getClass().getName(), null, null);
>
> }
> DataHandler rdh = (DataHandler) ret;
> System.out.println(rdh.getContentType());
> System.out.println((String)rdh.getContent());
> }
>
> public static void main(String args[]) {
> try {
>
> Options opts = new Options(args);
> SwAClient echoattachment = new SwAClient();
> echoattachment.getAttachment();
>
> }
> catch ( Exception e ) {
> if ( e instanceof AxisFault ) {
> ((AxisFault) e).dump();
> }
> System.err.println(e);
> e.printStackTrace();
> }
> System.exit(18);
> }
> }
>
> //-------------server-config.wsdd---------------------------------------
>
> <?xml version="1.0" encoding="UTF-8"?>
> <deployment xmlns="http://xml.apache.org/axis/wsdd/"
> xmlns:java="http://xml.apache.org/axis/wsdd/providers/java">
> <globalConfiguration>
> <parameter name="adminPassword" value="admin"/>
> <parameter name="attachments.implementation"
> value="org.apache.axis.attachments.AttachmentsImpl"/>
> <parameter name="sendXsiTypes" value="true"/>
> <parameter name="sendMultiRefs" value="true"/>
> <parameter name="sendXMLDeclaration" value="true"/>
> <parameter name="axis.sendMinimizedElements" value="true"/>
> <requestFlow>
> <handler type="java:org.apache.axis.handlers.JWSHandler">
> <parameter name="scope" value="session"/>
> </handler>
> <handler type="java:org.apache.axis.handlers.JWSHandler">
> <parameter name="scope" value="request"/>
> <parameter name="extension" value=".jwr"/>
> </handler>
> </requestFlow>
> </globalConfiguration>
> <handler name="LocalResponder"
> type="java:org.apache.axis.transport.local.LocalResponder"/>
> <handler name="URLMapper"
> type="java:org.apache.axis.handlers.http.URLMapper"/>
> <handler name="Authenticate"
> type="java:org.apache.axis.handlers.SimpleAuthenticationHandler"/>
> <service name="DataProvider" provider="java:EJB">
> <parameter name="allowedMethods" value="getAttachment"/>
> <parameter name="beanJndiName" value="DataProvider"/>
> <parameter name="homeInterfaceName" value="swa.DataProviderHome"/>
> <typeMapping
> deserializer="org.apache.axis.encoding.ser.BeanDeserializerFactory"
> encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
> qname="ns1:DataHandler"
> serializer="org.apache.axis.encoding.ser.BeanSerializerFactory"
> type="java:javax.activation.DataHandler"
> xmlns:ns1="http://activation.javax"/>
> </service>
> <service name="AdminService" provider="java:MSG">
> <parameter name="allowedMethods" value="AdminService"/>
> <parameter name="enableRemoteAdmin" value="false"/>
> <parameter name="className" value="org.apache.axis.utils.Admin"/>
> <namespace>http://xml.apache.org/axis/wsdd/</namespace>
> </service>
> <service name="Version" provider="java:RPC">
> <parameter name="allowedMethods" value="getVersion"/>
> <parameter name="className" value="org.apache.axis.Version"/>
> </service>
> <transport name="http">
> <requestFlow>
> <handler type="URLMapper"/>
> <handler type="java:org.apache.axis.handlers.http.HTTPAuthHandler"/>
> </requestFlow>
> </transport>
> <transport name="local">
> <responseFlow>
> <handler type="LocalResponder"/>
> </responseFlow>
> </transport>
> </deployment>
>
> //---------------------------------------------------------------------
>
> Thanks in advance
> Jacek
> p.s. When I was working with webservices without attachments I didn't any
> problems with my WebLogic's configuration.
>
> > Hi Jacek,
> >
> > A JAX-RPC implementation is required to support the following MIME
> > types to bind to various Java types according as JAX-RPC ver 1.0.
> > In other words, 'application/msword' is not required, basically.
> >
> > MIME Type | Java Type
> > -----------------------------+-----------------------------------
> > image/gif | java.awt.Image
> > image/jpeg | java.awt.Image
> > text/plain | java.lang.String
> > multipart/* | javax.mail.internet.MimeMultipart
> > text/xml or application/xml | javax.xml.transform.Source
> >
> > So if you have any trouble with the DataHandler(obj, mimeType)
> > and a MIME type not specified above like as 'application/msword',
> > that meets the specification.
> >
> > However, you have a chance to set other MIME types to your response
> > with a constructor 'DataHandler(DataSource ds)'.
> > And, please refer to the following site;
> > <http://java.sun.com/j2ee/sdk_1.3/techdocs/api/javax/activation/
> > MimetypesFileTypeMap.html>
> >
> > If you want to add new entries programmatically, see below;
> > <snippet>
> > String strMimeType = "application/msword doc";
> > javax.activation.MimetypesFileTypeMap map =
> > new javax.activation.MimetypesFileTypeMap();
> > map.addMimeTypes(strMimeType);
> > javax.activation.FileTypeMap.setDefaultFileTypeMap( map );
> > </snippet>
> >
> > P.S.
> > It seems that you also have any other mistake on serializer
> > configuration. Check again.
> >
> > Best Regards,
> >
> > Toshi (Toshiyuki Kimura) <[EMAIL PROTECTED]>
> > R&D Headquarters
> > NTT DATA Corporation
> >
> > -----Original Message-----
> > From: Jacek Gebala [mailto:[EMAIL PROTECTED]
> > Sent: Wednesday, June 25, 2003 5:34 PM
> > To: [EMAIL PROTECTED]
> > Cc: [EMAIL PROTECTED]
> > Subject: RE: help required for attachment using ejb as webservice
> >
> > Hi Toshi,
> >
> > Could you please to qualify how I can warp the byte of array to
> DataHandler?
> > When I write to:
> >
> > public DataHandler getAttachment() {
> > DataHandler dataHandler = new
> > DataHandler(ArrayOfBytes,"application/msword");
> > return dataHandler;
> > }
> > The error is:
> > faultString: java.io.IOException: No serializer found for class
> > javax.activation.CommandInfo in registry
> > [EMAIL PROTECTED]
> >
> > The question is:
> > Can I use DataHandler constructor (DataHandler(java.lang.Object obj,
> > java.lang.String mimeType) ) for passing on array of bytes? Type of
> content
> > is MS Word document (mimeType: application/msword).
> > Or should I use specific DataSource class (look at the example below)?
> > If yes, what the class should I use? I don't see any adequate in package
> > org.apache.axis.attachments.*;
> >
> > Anyway, when I try to write a example:
> >
> > public DataHandler getAttachment() {
> > String doc="Hello world.";
> > PlainTextDataSource textDS = new PlainTextDataSource("text",doc);
> > DataHandler dataHandler = new DataHandler(textDS);
> > return dataHandler;
> > }
> >
> > The error is:
> > faultString: java.io.IOException: No serializer found for class
> > java.io.ByteArrayOutputStream in registry
> > [EMAIL PROTECTED]
> >
> > What is wrong? I'm confused.
> > I use WebLogic 7 SP 1, and AXIS 1.1 RC1. I want to use MS SOAP Toolkit
3.0
> > on client machine.
> > Do you have any guidelines?
> >
> > Thanks in advance.
> >
> > Jacek Gebala
> > empolis Poland
> >
>
>
>