我是JDev和ADF的新手,我们要求构建一个可以接收对象数组的Web服务。基本上有一个Dot Net服务,它将从Exchange服务器读取电子邮件帐户,并通过使用我们的Web服务发送所有阅读的电子邮件。因此,点网程序可以从帐户发送多封电子邮件并发送到我们的网络服务。截至目前,我们已经创建了接受
等参数的Web服务@WebMethod
public String createHdaFile(@WebParam(name = "sender") String sender,
@WebParam(name = "primaryRecipient") String primaryRecipitant,
@WebParam(name = "secondaryRecipient") String secondaryRecipitant,
@WebParam(name = "subject") String subject,
@WebParam(name = "messageBody") String messageBody,
@WebParam(name = "attachmentName") String attachmentName
){
code ...
}
想知道我们是否有办法接受可以一次接收所有电子邮件的对象数组。
答案 0 :(得分:1)
行。首先,您应该为xml架构生成XSD文件 - 对于从xml生成类很有用。这是你的示例.xsd文件
<?xml version="1.0" encoding="utf-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="message" type="message"/>
<xs:complexType name="message">
<xs:sequence>
<xs:element name="attachmentName" type="xs:string" minOccurs="1" maxOccurs="1"/>
<xs:element name="messageBody" type="xs:string" minOccurs="1" maxOccurs="1"/>
<xs:element name="primaryRecipient" type="xs:string" minOccurs="1" maxOccurs="1"/>
<xs:element name="secodaryRecipient" type="xs:string" minOccurs="0" maxOccurs="1"/>
<xs:element name="sender" type="xs:string" minOccurs="1" maxOccurs="1"/>
<xs:element name="subject" type="xs:string" minOccurs="1" maxOccurs="1"/>
</xs:sequence>
</xs:complexType>
<xs:element name="root" type="root"/>
<xs:complexType name="root">
<xs:sequence>
<xs:element name="message" type="message" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
</xs:schema>
第二件事是从.xsd文件生成C#AND Java类。你可以这样做:
1.对于来自 CMD xjc -p <package> <path_to_xsd_file.xsd>
的Java类调用
2.对于C#类,从 Visual Studio命令行调用
xsd /C <path_to_xsd_file.xsd>
将java和c#类附加到项目中。生成的类在C#中应具有名称root
和message
,在Java中应具有Root
和Message
。
要序列化和解析 xmls,您可以使用以下代码: 1.在C#端 - 序列化为xml(字符串/字节[]&lt; - 取决于对你有用的东西)
MemoryStream stream = new MemoryStream();
root objectRoot = new root();
objectRoot.message = new message[2];
objectRoot.message[0] = new message();
objectRoot.message[0].attachmentName = "msg1";
objectRoot.message[0].messageBody = "mb1";
objectRoot.message[0].primaryRecipient = "pr1";
objectRoot.message[0].secodaryRecipient = "sr1";
objectRoot.message[0].sender = "s1";
objectRoot.message[0].subject = "su1";
objectRoot.message[1] = new message();
objectRoot.message[1].attachmentName = "msg2";
objectRoot.message[1].messageBody = "mb2";
objectRoot.message[1].primaryRecipient = "pr2";
objectRoot.message[1].secodaryRecipient = "sr2";
objectRoot.message[1].sender = "s2";
objectRoot.message[1].subject = "su2";
XmlSerializer serializer = new XmlSerializer(typeof(root));
serializer.Serialize(stream, objectRoot);
byte[] toSend = stream.ToArray();`
2。在java方面
byte[] requestByte;
Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller();
Root finalizationParameters = (Root)
jaxbUnmarshaller.unmarshal(new ByteArrayInputStream(requestByte));
我希望它会有所帮助。
答案 1 :(得分:0)
如果您有权访问.Net代码,可以考虑XML格式的信息?然后,将具有相同标记的多个元素添加到XML文档不是问题。我在.Net和WS之间做了类似的(XML消息)并且它有效。如果您需要一些代码来做,请问我。