2016-02-22 31 views
1
@XmlRootElement(name = "InitiatePhoneCall", namespace = "namespace") 
@XmlAccessorType(XmlAccessType.FIELD) 
@XmlType(name = "InitiatePhoneCall", 
     namespace = "namespace", 
     propOrder = {"messageParams"}) 

public class InitiatePhoneCall implements IRequest { 

    // variables 

    @XmlElement(name = "MessageParams", namespace = "namespace") 
    private HashMap<String, Object> messageParams; 

    public HashMap<String, Object> getMessageParams() { 
     return messageParams; 
    } 

    public void setMessageParams(HashMap<String, Object> messageParams) { 
     this.messageParams = messageParams; 
    } 

    //getter setters 

} 

我上面有我的應用程序的代碼塊的合法財產。我正在使用帶有JDK 1.7的Weblogic 12c服務器。我正在使用Web服務部署:HashMap的不是JAXB類

javax.xml.ws.WebServiceException:class package.InitiatePhoneCall在com.sun.xml.ws.server中沒有名稱{namespace} MessageParams的屬性。 sei.EndpointArgumentsBuilder $ DocLit。(EndpointArgumen tsBuilder.java:610)at com.sun.xml.ws.server.sei.TieHandler.createArgumentsBuilder(TieHandler.java:143)at com.sun.xml.ws.server.sei .TieHandler。(TieHandler.java:115)在com.sun.xml.ws.db.DatabindingImpl。(DatabindingImpl.java:116)

+0

javax.xml.ws.WebServiceException :class package.InitiatePhoneCall在com.sun.xml.ws.server.sei.EndpointArgumentsBuilder $ DocLit中沒有名稱{namespace} MessageParams 的屬性。 (EndpointArgumentsBuilder.java:610) at com.sun.xml.ws.server.sei.TieHandler.createArgumentsBuilder(TieHandler.java:143) at com.sun.xml.ws.server.sei.TieHandler。 (TieHandler.java:115) at com.sun.xml.ws.db.DatabindingImpl。 (DatabindingImpl.java:116) –

+0

試試看[this](http://stackoverflow.com/a/5331471/1346996)回答。 – aribeiro

+0

@XmlAnyAttribute不起作用。我在web服務部署中遇到了同樣的異常。 –

回答

0

1#溶液

使用此InitiatePhoneCall

@XmlRootElement(name = "InitiatePhoneCall", namespace = "namespace") 
@XmlAccessorType(XmlAccessType.FIELD) 
@XmlType(name = "InitiatePhoneCall", 
     namespace = "namespace", 
     propOrder = {"messageParams"}) 
public class InitiatePhoneCall implements IRequest { 

    @XmlElementWrapper(name="MessageParams",namespace="namespace") 
    private HashMap<String, Object> messageParams = new HashMap<String, Object>(); 

    public HashMap<String, Object> getMessageParams() { 
     return messageParams; 
    } 

    public void setMessageParams(HashMap<String, Object> messageParams) { 
     this.messageParams = messageParams; 
    } 
} 

2#解決方案

您也可以使用@XmlAdapter

import java.util.*; 
import javax.xml.bind.annotation.adapters.XmlAdapter; 

public class MapAdapter extends XmlAdapter<MapAdapter.AdaptedMap, Map<String, Object>> { 

    public static class AdaptedMap { 
     public List<Entry> entry = new ArrayList<Entry>(); 
    } 

    public static class Entry { 
     public String key; 
     public Object value; 
    } 

    @Override 
    public Map<String, Object> unmarshal(AdaptedMap adaptedMap) throws Exception { 
     Map<String, Object> map = new HashMap<String, Object>(); 
     for(Entry entry : adaptedMap.entry) { 
      map.put(entry.key, entry.value); 
     } 
     return map; 
    } 

    @Override 
    public AdaptedMap marshal(Map<String, Object> map) throws Exception { 
     AdaptedMap adaptedMap = new AdaptedMap(); 
     for(Map.Entry<String, Object> mapEntry : map.entrySet()) { 
      Entry entry = new Entry(); 
      entry.key = mapEntry.getKey(); 
      entry.value = mapEntry.getValue(); 
      adaptedMap.entry.add(entry); 
     } 
     return adaptedMap; 
    } 
} 

InitiatePhoneCall

@XmlRootElement(name = "InitiatePhoneCall", namespace = "namespace") 
@XmlAccessorType(XmlAccessType.FIELD) 
@XmlType(name = "InitiatePhoneCall", 
     namespace = "namespace", 
     propOrder = {"messageParams"}) 
public class InitiatePhoneCall implements IRequest { 

    @XmlElement(name="MessageParams",namespace="namespace") 
    @XmlJavaTypeAdapter(MapAdapter.class) 
    private HashMap<String, Object> messageParams = new HashMap<String, Object>(); 

    public HashMap<String, Object> getMessageParams() { 
     return messageParams; 
    } 

    public void setMessageParams(HashMap<String, Object> messageParams) { 
     this.messageParams = messageParams; 
    } 
} 
+0

嗨Xstian感謝您的答覆。您提供的解決方案解決了我的問題。但我的XSD已更改。根據我的要求,XSD文件不應該改變 –

+0

@ShankarVignesh你是對的,但你的問題你沒有談論XSD。無論如何,請爲我們提供複雜的類型。 – Xstian

+0

現有的XSD 新XSD - - - - -