RPC/literal vs RPC/Encoded in Java WebService consumer

那年仲夏 提交于 2019-12-23 21:07:00

问题


I've a RPC/Encoded webservice provider that expose an attachment in base64 format. Everything work fine, this is the output

 <multiRef id="id16" soapenc:root="0" soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xsi:type="ns4:Documento" xmlns:ns4="urn:interpro_Documento.rfc205.regione.toscana.it" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/">
     <descr xsi:type="xsd:string">smime.p7s</descr>
     <ext xsi:type="xsd:string">p7s</ext>
     <document xsi:type="soapenc:base64">UEQ5NGJXd2dkbVZ5YzJsdmJqMGlNUzR3SWlCbGJtTnZaR2x1WnowaVNWTlBMVGc0TlRrdE1TSS9QZ284SVVSUFExUlpVRVVnVTJWbgpibUYwZFhKaElGTlpVMVJGVFNBaVUyVm5ibUYwZFhKaExtUjBaQ0krQ2p4VFpXZHVZWFIxY21FK0NnazhTVzUwWlhOMFlYcHBiMjVsClBnb0pDVHhKWkdWdWRHbG1hV05oZEc5eVpUNEtDUWtKUEVOdlpHbGpaVUZ0YldsdWFYTjBjbUY2YVc5dVpUNURRMVF6UEM5RGIyUnAKWTJWQmJXMXBibWx6ZEhKaGVtbHZibVUrQ2drSkNUeERiMlJwWTJWQlQwOCtRVTlQTGtORFZETThMME52WkdsalpVRlBUejRLQ1FrSgpQRTUxYldWeWIxSmxaMmx6ZEhKaGVtbHZibVUrTURBd01ERXpPRHd2VG5WdFpYSnZVbVZuYVhOMGNtRjZhVzl1WlQ0S0NRa0pQRVJoCmRHRlNaV2RwYzNSeVlYcHBiMjVsUGpJd01UUXRNRE10TWpZOEwwUmhkR0ZTWldkcGMzUnlZWHBwYjI1bFBnb0pDVHd2U1dSbGJuUnAKWm1sallYUnZjbVUrQ2drSlBFOXlZVkpsWjJsemRISmhlbWx2Ym1VK0Nna0pDVEUyT2pRd09qTTBDZ2tKUEM5UGNtRlNaV2RwYzNSeQpZWHBwYjI1bFBnb0pDVHhQY21sbmFXNWxQZ29KQ1FrOFNXNWthWEpwZW5wdlZHVnNaVzFoZEdsamJ5QjBhWEJ2UFNKemJYUndJajRLCkNRa0pDV3RwWW1WeWJtVjBaWE5mYzNkQWJHVm5ZV3h0WVdsc0xtbDBDZ2tKQ1R3dlNXNWthWEpwZW5wdlZHVnNaVzFoZEdsamJ6NEsKQ1FrSlBFMXBkSFJsYm5SbFBnb0pDUWtKUEVGdGJXbHVhWE4wY21GNmFXOXVaVDRLQ1FrSkNRazhSR1Z1YjIxcGJtRjZhVzl1WlQ0SwpDUWtKQ1FrSlEybDBkTU9nSUdScElDRWl3cU1rSmk4b0tUMDlQOE9ud3JEQ3B5ckRxVjQvQ2drSkNRa0pQQzlFWlc1dmJXbHVZWHBwCmIyNWxQZ29KQ1FrSkNUeERiMlJwWTJWQmJXMXBibWx6ZEhKaGVtbHZibVUrQ2drSkNRa0pDVU5EVkRNS0NRa0pDUWs4TDBOdlpHbGoKWlVGdGJXbHVhWE4wY21GNmFXOXVaVDRLQ1FrSkNRazhWVzVwZEdGUGNtZGhibWw2ZW1GMGFYWmhQZ29KQ1FrSkNRazhSR1Z1YjIxcApibUY2YVc5dVpUNEtDUWtKQ1FrSkNUQXdJQzBnVkhKaGMzQnZjblJwWEVsdWRHVnlibWtLQ1FrSkNRa0pQQzlFWlc1dmJXbHVZWHBwCmIyNWxQZ29KQ1FrSkNRazhVR1Z5YzI5dVlUNEtDUWtKQ1FrSkNUeE9iMjFsUGdvSkNRa0pDUWtKQ1UxaGNtTnZDZ2tKQ1FrSkNRazgKTDA1dmJXVStDZ2tKQ1FrSkNRazhRMjluYm05dFpUNEtDUWtKQ1FrSkNRbENiM1p2Q2drSkNRa0pDUWs4TDBOdloyNXZiV1UrQ2drSgpDUWtKQ1R3dlVHVnljMjl1WVQ0S0NRa0pDUWtKUEVsdVpHbHlhWHA2YjFCdmMzUmhiR1UrQ2drSkNRa0pDUWs4Vkc5d2IyNXBiVzhnClpIVm5QU0FpSWo0S0NRa0pDUWtKQ1FsV2FXRWdRMkZ6Wld4c2FRb0pDUWtKQ1FrSlBDOVViM0J2Ym1sdGJ6NEtDUWtKQ1FrSkNUeEQKYVhacFkyOCtDZ2tKQ1FrSkNRa0pUbkl1SURFeEx6RUtDUWtKQ1FrSkNUd3ZRMmwyYVdOdlBnb0pDUWtKQ1FrSlBFTkJVRDRLQ1FrSgpDUWtKQ1FrME5ERXlNd29KQ1FrSkNRa0pQQzlEUVZBK0Nna0pDUWtKQ1FrOFEyOXRkVzVsUGdvSkNRa0pDUWtKQ1VabGNuSmhjbUVLCkNRa0pDUWtKQ1R3dlEyOXRkVzVsUGdvSkNRa0pDUWtKUEZCeWIzWnBibU5wWVQ0S0NRa0pDUWtKQ1FsR1JRb0pDUWtKQ1FrSlBDOVEKY205MmFXNWphV0UrQ2drSkNRa0pDVHd2U1c1a2FYSnBlbnB2VUc5emRHRnNaVDRLQ1FrSkNRa0pQRWx1WkdseWFYcDZiMVJsYkdWdApZWFJwWTI4K0Nna0pDUWtKQ1FsMFpYTjBYM0psWjJsdmJtVjBiM05qWVc1aE1UVkFjR1ZqTG1sMENna0pDUWtKQ1R3dlNXNWthWEpwCmVucHZWR1ZzWlcxaGRHbGpiejRLQ1FrSkNRa0pQRlJsYkdWbWIyNXZQZ29KQ1FrSkNRazhMMVJsYkdWbWIyNXZQZ29KQ1FrSkNRazgKUm1GNFBnb0pDUWtKQ1FrOEwwWmhlRDRLQ1FrSkNRazhMMVZ1YVhSaFQzSm5ZVzVwZW5waGRHbDJZVDRLQ1FrSkNUd3ZRVzF0YVc1cApjM1J5WVhwcGIyNWxQZ29KQ1FrSlBFRlBUejRLQ1FrSkNRazhSR1Z1YjIxcGJtRjZhVzl1WlQ0S0NRa0pDUWtKUTJsMGRNT2dJR1JwCklDRWl3cU1rSmk4b0tUMDlQOE9ud3JEQ3B5ckRxVjQvQ2drSkNRa0pQQzlFWlc1dmJXbHVZWHBwYjI1bFBnb0pDUWtKQ1R4RGIyUnAKWTJWQlQwOCtDZ2tKQ1FrSkNVRlBUeTVEUTFRekNna0pDUWtKUEM5RGIyUnBZMlZCVDA4K0Nna0pDUWs4TDBGUFR6NEtDUWtKUEM5TgphWFIwWlc1MFpUNEtDUWs4TDA5eWFXZHBibVUrQ2drSkNna0pDanhFWlhOMGFXNWhlbWx2Ym1VZ1kyOXVabVZ5YldGU2FXTmxlbWx2CmJtVTlJbk5wSWlBK0NnazhTVzVrYVhKcGVucHZWR1ZzWlcxaGRHbGpieUIwYVhCdlBTSnpiWFJ3SWo0S0NRbGhibVJ5WldFdVltRm4KYkdsdmJtbEFjbVZrZEhWeWRHeGxMbWwwQ2drOEwwbHVaR2x5YVhwNmIxUmxiR1Z0WVhScFkyOCtDZ2s4UkdWemRHbHVZWFJoY21sdgpQZ29KQ1R4RVpXNXZiV2x1WVhwcGIyNWxQZ3BGYkdWdVlTQkRhV05qYVFvSkNUd3ZSR1Z1YjIxcGJtRjZhVzl1WlQ0S0NUd3ZSR1Z6CmRHbHVZWFJoY21sdlBnbzhMMFJsYzNScGJtRjZhVzl1WlQ0S0NRa0tDUWs4VW1semNHOXpkR0UrQ2drSkNUeEpibVJwY21sNmVtOVUKWld4bGJXRjBhV052SUhScGNHODlJbk50ZEhBaVBnb0pDUWtKYTJsaVpYSnVaWFJsYzE5emQwQnNaV2RoYkcxaGFXd3VhWFFLQ1FrSgpQQzlKYm1ScGNtbDZlbTlVWld4bGJXRjBhV052UGdvSkNUd3ZVbWx6Y0c5emRHRStDZ2tKQ2drSlBGSnBjMlZ5ZG1GMGJ6NEtDUWtKClRnb0pDVHd2VW1selpYSjJZWFJ2UGdvSkNRb0pDVHhQWjJkbGRIUnZQZ29KQ1Fsa1lXUnpaSE5oQ2drSlBDOVBaMmRsZEhSdlBnb0oKQ1FvSkNUeE9iM1JsUGdvSkNUd3ZUbTkwWlQ0S0NUd3ZTVzUwWlhOMFlYcHBiMjVsUGdvSkNnazhSR1Z6WTNKcGVtbHZibVUrQ2drSgpQRVJ2WTNWdFpXNTBieUJ1YjIxbFBTSnBiV2N3TURFdWRHbG1JaUIwYVhCdlVtbG1aWEpwYldWdWRHODlJazFKVFVVaVBnb0pQRTluCloyVjBkRzgrQ2drSlNXMXRZV2RwYm1VZ1JHOWpkVzFsYm5Sdk1EQXhDZ2s4TDA5bloyVjBkRzgrQ2p3dlJHOWpkVzFsYm5SdlBnb0oKUEM5RVpYTmpjbWw2YVc5dVpUNEtQQzlUWldkdVlYUjFjbUUrQ2c9PQo=</document>
  </multiRef>

The same webservice, in RPC/Literal format, expose this:

<documento>
           <descr>smime.p7s</desc>
           <ext>p7s</ext>
           <document>85</document>
           <document>69</document>
           <document>81</document>
           <document>53</document>
           <document>78</document>
           <document>71</document>
           <document>74</document>
           <document>88</document>
           <document>100</document>
           <document>50</document>
           <document>100</document>
           <document>107</document>
           <document>98</document>
           <document>86</document>
           <document>90</document>
           <document>53</document>
           <document>89</document>
           <document>122</document>
           <document>74</document>
           <document>115</document>
           .........
           .........

What's the problem? How can i have only one tag with base64 format inside using RPC/Literal SOAP message format?


回答1:


From your example I assume that document is an array of bytes. This is what the JAX-RPC spec says:

5.3.3 Array of Bytes Both byte[] and Byte[] are mapped to the xsd:base64Binary type. The mapping of the java.lang.Byte[] type to the xsd:base64Binary type is now deprecated because it cannot represent null values accurately. Instead, Byte[] should be mapped to a regular array following the rules in section 5.3.4.

So if you really have byte[], the first mapping is the correct one, if you have Byte[], it's the second one (with large overhead, but capable of representing nulls). AFAIR there were bugs for example in Apache Axis that got this wrong, maybe it's also the case with your document. So check if you really use byte[] and which library you are using. And, like the commenters say, you shouldn't use rpc style unless you are forced to. Use document/literal binding instead.



来源:https://stackoverflow.com/questions/23344373/rpc-literal-vs-rpc-encoded-in-java-webservice-consumer

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!