`

电信的彩信发送axis2-附件

阅读更多
在处理一个这样的问题,如:一些基本的信息,姓名,年龄,电话, 加一些附件文件,可以是 doc, jpg  等,内容不限制,原来的 client 用 axis 生产,在发送附件的时候用了下列指令,能将附件和基本信息发送给 server (web-service),代码如下:
String fileName1 = new String("/local/data/g.txt");
File file1 = new File(fileName1);
javax.activation.DataHandler attachmentFile1 = new DataHandler(new
FileDataSource(file1));
_call.addAttachmentPart(attachmentFile1);
//_call 是 axis 的 org.apache.axis.client.Call 类的对象。


现在用 axis2 v1.5 来生产 client/stub , 参考例子:soapwithattachments , 发送, 代码如下:

File f=new File(p.getFileName());
DataHandler h=new DataHandler(new FileDataSource(f)); 
_messageContext.addAttachment(h);

这样的方法,结果,server 没有收到附件,一定是这样处理有问题?水能告诉如何处理才能发送附件呢?

soapwithattachments 例子,好像只能传输文件,不能包含文件以为的信息。

问题补充:
再一次比较了程序,终于知道原因了。

在 stub 中加下面代码:
_operationClient.getOptions().setProperty(org.apache.axis2.Constants.Configuration.ENABLE_SWA, org.apache.axis2.Constants.VALUE_TRUE);

详细代码如下:

/**
* 建立一个 SendMessage 对象
* @param task
* @return
*/
private SendMessage createMessage(Task task,MmsPartSet mms) throws Exception {

SendMessage m=new SendMessage();
URI[] add=new org.apache.axis2.databinding.types.URI[1];
String to=task.getToPhn();
String pre=config.get("add_86");
if(pre==null) pre="";
to=pre+to;
add[0]=new org.apache.axis2.databinding.types.URI(to);
String srcPhn=task.getSrcPhn();
ChargingInformation fee = new ChargingInformation();
fee.setAmount(new java.math.BigDecimal(task.getFeeCode()));
fee.setDescription("feeType="+task.getFeeType());
fee.setCode("0");
fee.setCurrency("rmb"); 

SimpleReference rr = new SimpleReference();
String ae=config.get("add_endpoint");
if(ae==null) ae="";
rr.setEndpoint(new org.apache.axis2.databinding.types.URI(ae+to));
rr.setInterfaceName("33");
String msgid=task.getTaskId();;
while(msgid.length()<11){
msgid="0"+msgid;
}
msgid=task.getTaskType()+msgid;

rr.setCorrelator(Tools.getTimeStamp()+msgid.substring(msgid.length()-12));
   
m.setAddresses(add);
m.setSenderAddress(srcPhn);
m.setPriority(MessagePriority.Normal);
m.setCharging(fee);
m.setSubject(Tools.toUtf(mms.getTitle())); //要以UTF-8格式的字符串
m.setReceiptRequest(rr);

return m;
}

/**
* 建立一个 RequestSOAPHeader 对象
* @param task
* @return
*/
private RequestSOAPHeader createHeader(Task task) throws Exception {
RequestSOAPHeader h=new RequestSOAPHeader();
h.setTransactionId(task.getTaskType()+ task.getTaskId());
String tmp=Tools.getTimeStamp();

String spid=config.get("spid_"+task.getGwid());;
String pwd=config.get("spwd_"+task.getGwid());
String temp = spid + pwd + tmp;
String md5=Tools.md5(temp);

h.setTimeStamp(tmp);
h.setSpId(spid);

h.setSpPassword(md5);
String dst=config.get("fa_"+task.getGwid());
if(dst==null) dst="";
dst=dst+task.getToPhn();

URI fa=new org.apache.axis2.databinding.types.URI(dst);
h.setFA(fa);
URI  oa=new org.apache.axis2.databinding.types.URI(dst);
h.setOA(oa);
h.setLinkId(task.getLinkid());
h.setProductId(task.getSrvCode());
h.setMulticastMessaging(false);
h.setSAN(config.get("san_"+task.getGwid()));
h.setTransEnd(new EndReason("0",true));

return h;
}

/**
* _messageContext.addAttachment(null);//dataHandler);//加附件
* @param ctx
* @param mms
*/
private void addMms(MessageContext ctx,org.apache.axiom.soap.SOAPEnvelope env,MmsPartSet mms) throws Exception {
DataHandler h;
MmsPart p;
SOAPFactory fac = OMAbstractFactory.getSOAP12Factory();
OMNamespace omNs = fac.createOMNamespace("http://service.soapwithattachments.sample", "swa");
String fileName="";

for(int i=0;i<mms.getCount();i++){
p=mms.getPart(i);
fileName="a"+i+"."+p.getNameExt();
h=null;
if(p.getType()==MmsPart.TEXT){
String msg=Tools.readFromFile(new File(p.getFileName()));
msg=Tools.toUtf(msg);
byte []b=msg.getBytes("UTF-8");
ByteArrayDataSource bs=new ByteArrayDataSource();
bs.setInputStream(new ByteArrayInputStream(b));
bs.setName(p.getFileName());
bs.setContentType("text/plain");
h=new DataHandler(bs);
}else{
File f=new File(p.getFileName());
if(f.exists()){
h=new DataHandler(new FileDataSource(f));
}
}
if(h!=null){
ctx.addAttachment(h);
}
}


/**
* Auto generated method signature - 同步方式发送彩信
* @see dx.client.mt.SendMessageService#sendMessage
* @param sendMessage0
* @throws dx.client.mt.PolicyException
* @throws dx.client.mt.ServiceException , ADBException
*/

public MmsSendResult sendMessage(Task task,MmsPartSet mms) throws Exception {

MessageContext _messageContext = null;

try {
OperationClient _operationClient = _serviceClient.createClient(_operations[0].getName());

//附件以真实内容方法传递,否则不会传到远程去的
_operationClient.getOptions().setProperty(org.apache.axis2.Constants.Configuration.ENABLE_SWA, org.apache.axis2.Constants.VALUE_TRUE);

_operationClient.getOptions().setAction(
    "http://www.chinatelecom.com.cn/wsdl/ctcc/multimedia_messaging/send/v2_2/interface/SendMessage/sendMessageRequest");
_operationClient.getOptions().setExceptionToBeThrownOnSOAPFault(true);

addPropertyToOperationClient(
_operationClient,
org.apache.axis2.description.WSDL2Constants.ATTR_WHTTP_QUERY_PARAMETER_SEPARATOR,
"&");

// create a message context
_messageContext = new org.apache.axis2.context.MessageContext();

SendMessageE me=new SendMessageE();
SendMessage m=createMessage(task,mms);
me.setSendMessage(m);

org.apache.axiom.soap.SOAPEnvelope env = null; // create SOAP envelope with that payload
env = toEnvelope(
getFactory(_operationClient.getOptions().getSoapVersionURI()),
me,
optimizeContent(new javax.xml.namespace.QName(
"http://www.chinatelecom.com.cn/wsdl/ctcc/multimedia_messaging/send/v2_2/interface",
"sendMessage")));
// 设置SOAP head

RequestSOAPHeader h = createHeader(task);//new RequestSOAPHeader();
RequestSOAPHeaderE he = new RequestSOAPHeaderE();
he.setRequestSOAPHeader(h);
OMFactory fac = OMAbstractFactory.getOMFactory();
QName qn=new QName("RequestSOAPHeader","http://www.chinatelecom.com.cn/schema/ctcc/common/v2_1");

OMElement oe=he.getOMElement(qn, fac);//将头添加给SOAP 

addMms(_messageContext,env,mms); //加附件  

_messageContext.setEnvelope(env); 
_serviceClient.addHeader(oe); //将头添加给SOAP 
_serviceClient.addHeadersToEnvelope(env);//给Envelope设置 Soap-Head  

_operationClient.addMessageContext(_messageContext); // add the message contxt to client
_operationClient.execute(true); // 执行-向 server发送消息

org.apache.axis2.context.MessageContext _returnMessageContext = _operationClient
.getMessageContext(org.apache.axis2.wsdl.WSDLConstants.MESSAGE_LABEL_IN_VALUE);
org.apache.axiom.soap.SOAPEnvelope _returnEnv = _returnMessageContext.getEnvelope();

java.lang.Object object = fromOM(
_returnEnv.getBody().getFirstElement(),
dx.client.mt.SendMessageServiceStub.SendMessageResponseE.class,
getEnvelopeNamespaces(_returnEnv));

SendMessageResponseE re=(SendMessageResponseE)object;
SendMessageResponse or=re.getSendMessageResponse();

MmsSendResult res=new MmsSendResult();
res.setStatusCode(or.getResult());
res.setStatusMsg(or.getResult());
res.setToPhn(task.getToPhn());
String msgid=m.getReceiptRequest().getCorrelator();
res.setMsgid(msgid);
res.setTransid(h.getTransactionId());

return res;
} catch (org.apache.axis2.AxisFault f) {

org.apache.axiom.om.OMElement faultElt = f.getDetail();
if (faultElt != null) {
if (faultExceptionNameMap.containsKey(faultElt.getQName())) {
// make the fault by reflection
try {
java.lang.String exceptionClassName = (java.lang.String) faultExceptionClassNameMap
.get(faultElt.getQName());
java.lang.Class exceptionClass = java.lang.Class
.forName(exceptionClassName);
java.lang.Exception ex = (java.lang.Exception) exceptionClass
.newInstance();
// message class
java.lang.String messageClassName = (java.lang.String) faultMessageMap
.get(faultElt.getQName());
java.lang.Class messageClass = java.lang.Class
.forName(messageClassName);
java.lang.Object messageObject = fromOM(faultElt,
messageClass, null);
java.lang.reflect.Method m = exceptionClass.getMethod(
"setFaultMessage",
new java.lang.Class[] { messageClass });
m.invoke(ex, new java.lang.Object[] { messageObject });

if (ex instanceof dx.client.mt.PolicyException) {
throw (dx.client.mt.PolicyException) ex;
}

if (ex instanceof dx.client.mt.ServiceException) {
throw (dx.client.mt.ServiceException) ex;
}

throw new java.rmi.RemoteException(ex.getMessage(), ex);
} catch (java.lang.ClassCastException e) {
// we cannot intantiate the class - throw the original
// Axis fault
throw f;
} catch (java.lang.ClassNotFoundException e) {
// we cannot intantiate the class - throw the original
// Axis fault
throw f;
} catch (java.lang.NoSuchMethodException e) {
// we cannot intantiate the class - throw the original
// Axis fault
throw f;
} catch (java.lang.reflect.InvocationTargetException e) {
// we cannot intantiate the class - throw the original
// Axis fault
throw f;
} catch (java.lang.IllegalAccessException e) {
// we cannot intantiate the class - throw the original
// Axis fault
throw f;
} catch (java.lang.InstantiationException e) {
// we cannot intantiate the class - throw the original
// Axis fault
throw f;
}
} else {
throw f;
}
} else {
throw f;
}
} finally {
_messageContext.getTransportOut().getSender().cleanup(
_messageContext);
}
}

4
0
分享到:
评论
5 楼 熊猫妞妞 2010-08-17  
终于搞定彩信,虽然简单了点,不过终于可以了!
4 楼 熊猫妞妞 2010-08-16  
你好,有个关于你发的彩信的问题,想问你,急,明天上午能不能给我个电话,手机:13408546941,多谢!
3 楼 liuccc1 2009-12-01  
使用axis1.4发送xx.txt,这样才能把xx.txt不以附件的形式而直接将xx.txt中的消息作为彩信内容?
2 楼 justcol 2009-11-26  
我也是按照如上写法发送附件,但是程序抛出了错误:
Exception in thread "main" java.lang.IllegalArgumentException: Null OutputStream specified
	at org.apache.xmlbeans.impl.store.Cursor._save(Cursor.java:577)
	at org.apache.xmlbeans.impl.store.Cursor.save(Cursor.java:2544)
	at org.apache.xmlbeans.impl.values.XmlObjectBase.save(XmlObjectBase.java:180)...

请问您遇到过这个问题么?如何解决的?谢谢

1 楼 superherosk123 2009-08-24  
个人感觉,用axis2的axiom模型比较好,据说单节点发送速度是最快的
用axis的stub 比较好些...

相关推荐

    axis2c-bin-1.6.0 axis2c-src-1.6.0

    axis2c-bin-1.6.0-linux.tar.gz axis2c-bin-1.6.0-win32.zip axis2c-src-1.6.0.tar.gz axis2c-src-1.6.0.zip 加md5

    axis2-1.5.1-bin.zip axis2-1.5.1-war.zip axis2部署使用

    Apache Axis2是著名的开源Web服务框架,用于构建和部署高效且灵活的Web服务。这个框架是基于Axis1的升级版,提供了许多改进和新特性,包括更好的性能、模块化架构和增强的MIME支持。标题提到的“axis2-1.5.1-bin.zip...

    axis2-idea-plugin-1.7.9.zip_axis2_axis2-idea-plugin_idea导入axis2_

    标题中的"axis2-idea-plugin-1.7.9.zip_axis2_axis2-idea-plugin_idea导入axis2_"提到了几个关键元素,分别是"axis2"、"idea-plugin"和"idea导入axis2",这暗示了这个压缩包是用于在IntelliJ IDEA这款集成开发环境...

    axis2-eclipse-codegen-plugin-1.6.2.zip和axis2-eclipse-service-plugin-1.6.2.zip

    标题中的"axis2-eclipse-codegen-plugin-1.6.2.zip"和"axis2-eclipse-service-plugin-1.6.2.zip"是两个与Apache Axis2相关的Eclipse插件,用于简化Web服务的开发过程。Apache Axis2是Java平台上一个成熟的Web服务...

    axis2-1.6.2

    axis2-1.6.2.zip, windows axis2工具,根据 WSDL生成java文件。 1、axis2客户端下载地址:http://mirror.esocc.com/apache//axis/axis2/java/core/1.6.2/axis2-1.6.2-bin.zip; 2、下载解压在D:\Work_Program_...

    axis2-eclipse-service与axis2-eclipse-codegen插件

    目前axis2最高版本是2.0以上的版本,但是eclipse和myeclipse都不支持,无奈只能使用低版本的插件1.6.3;经实验,可以安装成功; 安装方法:右键解压到当前文件夹,Copy解压的文件到eclipse安装目录dropins下,重启...

    axis2-eclipse-codegen-plugin-1.6.2和axis2-eclipse-service-plugin-1.6.2

    标题中的"axis2-eclipse-codegen-plugin-1.6.2和axis2-eclipse-service-plugin-1.6.2"指的是两个与Apache Axis2相关的Eclipse插件:Axis2代码生成插件和Axis2服务插件,它们是版本1.6.2的。Apache Axis2是一个流行的...

    axis2-1.4.1-bin.zip axis2-1.4.1-war.zip

    标题中的"axis2-1.4.1-bin.zip"和"axis2-1.4.1-war.zip"指的是Apache Axis2的两个不同版本的发行包,分别代表了Axis2的可执行二进制版本和Web应用程序版本。Apache Axis2是一个高度可扩展且功能强大的Web服务引擎,...

    axis2-1.6.2.zip

    axis2-1.6.2.zip, windows axis2工具,根据 WSDL生成java文件。 1、axis2客户端下载地址:http://mirror.esocc.com/apache//axis/axis2/java/core/1.6.2/axis2-1.6.2-bin.zip; 2、下载解压在D:\Work_Program_...

    axis2-1.6.1

    标题“axis2-1.6.1”指的是Apache Axis2的1.6.1版本,这是一个流行的开源Web服务引擎,用于构建和部署Web服务。Apache Axis2是Axis1的下一代,设计为更灵活、可扩展且高效。在这个版本中,它提供了一系列改进和新...

    axis2-adb-1.4.1.jar

    axis2-adb-1.4.1.jar axis2-adb-1.4.1.jar

    axis2-1.6.0-bin和axis2-1.6.0-war

    标题中的"axis2-1.6.0-bin"和"axis2-1.6.0-war"指的是Apache Axis2的不同发布版本。Apache Axis2是基于Java的Web服务引擎,它是Apache SOAP项目的下一代产品,用于创建和部署Web服务及处理SOAP消息。 **Apache Axis...

    axis2-1.6.2-war+axis2-1.6.1-war+axis2-1.6.2-bin

    标题中的"axis2-1.6.2-war+axis2-1.6.1-war+axis2-1.6.2-bin"表明这是一个包含不同版本的Apache Axis2服务框架的集合。Axis2是Apache软件基金会开发的一个Web服务引擎,它主要用于创建和部署Web服务以及处理SOAP消息...

    axis2-eclipse-service-archiver-wizard和axis2-eclipse-codegen-wizard

    共四个文件,都是最先版的,希望可以帮助大家。axis2-eclipse-service-archiver-wizard和axis2-eclipse-codegen-wizard和axis2-1.6.1-bin和axis2-1.6.1-war

    axis2-1.5.6完整版

    Axis2 是一个强大的 Web Service 框架,它是由 Apache 软件基金会开发的,主要用于构建和部署 Web 服务。版本 1.5.6 是 Axis2 的一个稳定版本,提供了一系列增强的功能和修复了若干已知问题,使得在 SAP 中进行 Web ...

    axis2-1.7.9.zip

    "axis2-1.7.9.zip" 是一个包含Apache Axis2 1.7.9版本的二进制发行版的压缩文件。Apache Axis2是一个成熟的、高性能的Web服务引擎,用于创建和部署Web服务。它是Apache SOAP项目的下一代,专注于提供更强大的功能和...

    Axis2-1.6.2-bin和Axis2-1.6.2-war

    Axis2是Apache软件基金会开发的一款基于Java的Web服务框架,用于构建高效、可扩展的Web服务。这个框架提供了丰富的功能,包括服务部署、消息处理、事务管理等,使其成为企业级应用开发的重要工具。我们主要关注两个...

    axis2-std-1.0-bin.zip与axis2.war

    Apache Axis2是基于Java的Web服务引擎,它用于创建和部署Web服务以及处理SOAP消息。在给定的信息中,我们关注的是"axis2-std-1.0-bin.zip"和"axis2.war"这两个文件。 1. **axis2-std-1.0-bin.zip**: 这是一个包含了...

    axis2-idea-plugin-1.7.8

    "axis2-idea-plugin-1.7.8" 是一个专为IntelliJ IDEA设计的插件,主要用于提升开发者在处理Axis2 Web服务时的效率和便利性。Axis2是Apache软件基金会开发的一个开放源代码Web服务框架,它提供了一种高效、灵活的方式...

Global site tag (gtag.js) - Google Analytics